python讀取html文件,python分片上傳_分片上傳_分片上傳_上傳文件_Python_SDK 示例_對象存儲 OSS - 阿里云...

 2023-11-10 阅读 30 评论 0

摘要:OSS提供的分片上傳(Multipart Upload)功能,將要上傳的較大文件(Object)分成多個數據塊(Part)來分別上傳,上傳完成后再調用CompleteMultipartUpload接口將這些Part組合成一個Object來達到斷點續傳的效果。分片上傳流程python讀取html文件、分片上傳(Multipart Up

OSS提供的分片上傳(Multipart Upload)功能,將要上傳的較大文件(Object)分成多個數據塊(Part)來分別上傳,上傳完成后再調用CompleteMultipartUpload接口將這些Part組合成一個Object來達到斷點續傳的效果。

分片上傳流程

python讀取html文件、分片上傳(Multipart Upload)分為以下三個步驟:

初始化一個分片上傳事件。

調用bucket.init_multipart_upload方法返回OSS創建的全局唯一的uploadId。

python中自定義模塊的導入方法?上傳分片。

調用bucket.upload_part方法上傳分片數據。

說明

python列表分片。對于同一個uploadId,分片號(partNumber)標識了該分片在整個文件內的相對位置。如果使用同一個分片號上傳了新的數據,那么OSS上這個分片已有的數據將會被覆蓋。

OSS將收到的分片數據的MD5值放在ETag頭內返回給用戶。

OSS計算上傳數據的MD5值,并與SDK計算的MD5值比較,如果不一致則返回InvalidDigest錯誤碼。

csv文件python,完成分片上傳。

所有分片上傳完成后,調用bucket.complete_multipart_upload方法將所有分片合并成完整的文件。

分片上傳完整示例

以下通過一個完整的示例對分片上傳的流程進行逐步解析:

# -*- coding: utf-8 -*-

import os

from oss2 import SizedFileAdapter, determine_part_size

from oss2.models import PartInfo

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

key = ''

filename = ''

total_size = os.path.getsize(filename)

# determine_part_size方法用于確定分片大小。

part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# 初始化分片。

# 如需在初始化分片時設置文件存儲類型,請在init_multipart_upload中設置相關headers,參考如下。

# headers = dict()

# headers["x-oss-storage-class"] = "Standard"

# upload_id = bucket.init_multipart_upload(key, headers=headers).upload_id

upload_id = bucket.init_multipart_upload(key).upload_id

parts = []

# 逐個上傳分片。

with open(filename, 'rb') as fileobj:

part_number = 1

offset = 0

while offset < total_size:

num_to_upload = min(part_size, total_size - offset)

# 調用SizedFileAdapter(fileobj, size)方法會生成一個新的文件對象,重新計算起始追加位置。

result = bucket.upload_part(key, upload_id, part_number,

SizedFileAdapter(fileobj, num_to_upload))

parts.append(PartInfo(part_number, result.etag))

offset += num_to_upload

part_number += 1

# 完成分片上傳。

# 如需在完成分片上傳時設置文件訪問權限ACL,請在complete_multipart_upload函數中設置相關headers,參考如下。

# headers = dict()

# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE

# bucket.complete_multipart_upload(key, upload_id, parts, headers=headers)

bucket.complete_multipart_upload(key, upload_id, parts)

# 驗證分片上傳。

with open(filename, 'rb') as fileobj:

assert bucket.get_object(key).read() == fileobj.read()

說明 網絡情況較好時,建議增大分片大小。反之,減小分片大小。

取消分片上傳事件

您可以調用bucket.abort_multipart_upload方法來取消分片上傳事件。當一個分片上傳事件被取消后,無法再使用此uploadId做任何操作,已經上傳的分片數據會被刪除。

以下代碼用于取消分片上傳事件:

# -*- coding: utf-8 -*-

import os

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

key = ''

# 由init_multipart_upload接口返回的upload_id。

upload_id = ''

# 取消指定upload_id的分片上傳事件,已上傳的分片會被刪除。

bucket.abort_multipart_upload(key, upload_id)

列舉已上傳的分片信息

以下代碼用于列舉已上傳的分片信息:

# -*- coding: utf-8 -*-

import os

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

key = ''

# 由init_multipart_upload接口返回的upload_id。

upload_id = ''

# 列舉指定upload_id對應的已上傳分片信息。

for part_info in oss2.PartIterator(bucket, key, upload_id):

print('part_number:', part_info.part_number)

print('etag:', part_info.etag)

print('size:', part_info.size)

列舉已上傳分片的更多詳情,請參見ListParts。

列舉分片上傳事件

列舉指定Object的分片上傳事件

以下代碼用于列舉指定Object的分片上傳事件:

# -*- coding: utf-8 -*-

import os

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

key = ''

# 列舉Object的所有分片上傳事件。對于同一個Object,每次調用init_multipart_upload均會返回不同的upload_id。

# 一個upload_id對應一個分片上傳事件。

for upload_info in oss2.ObjectUploadIterator(bucket, key):

print('key:', upload_info.key)

print('upload_id:', upload_info.upload_id)

列舉存儲空間下的所有分片事件

以下代碼用于列舉存儲空間下的所有分片上傳事件:

# -*- coding: utf-8 -*-

import os

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 列舉存儲空間下的所有分片上傳事件。

for upload_info in oss2.MultipartUploadIterator(bucket):

print('key:', upload_info.key)

print('upload_id:', upload_info.upload_id)

列舉存儲空間下指定前綴Object的分片上傳事件

以下代碼用于列舉存儲空間下指定前綴Object的分片上傳事件:

# -*- coding: utf-8 -*-

import os

import oss2

# 阿里云主賬號AccessKey擁有所有API的訪問權限,風險很高。強烈建議您創建并使用RAM賬號進行API訪問或日常運維,請登錄RAM控制臺創建RAM賬號。

auth = oss2.Auth('', '')

# Endpoint以杭州為例,其它Region請按實際情況填寫。

bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '')

# 列舉存儲空間下以'test'為前綴的Object的分片上傳事件。

for upload_info in oss2.MultipartUploadIterator(bucket, prefix='test'):

print('key:', upload_info.key)

print('upload_id:', upload_info.upload_id)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/169940.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息