簡體   English   中英

Python Boto3 AWS 分段上傳語法

[英]Python Boto3 AWS Multipart Upload Syntax

我已成功通過 AWS 進行身份驗證並使用 Bucket 對象上的“put_object”方法上傳文件。 現在我想使用 multipart API 來為大文件完成這個。 我在這個問題中找到了公認的答案: How to save S3 object to a file using boto3

但是在嘗試實施時,我收到了“未知方法”錯誤。 我究竟做錯了什么? 我的代碼如下。 謝謝!

## Get an AWS Session
self.awsSession = Session(aws_access_key_id=accessKey,
aws_secret_access_key=secretKey,
aws_session_token=session_token,
region_name=region_type)  

 ...          

# Upload the file to S3
s3 = self.awsSession.resource('s3')
s3.Bucket('prodbucket').put_object(Key=fileToUpload, Body=data) # WORKS
#s3.Bucket('prodbucket').upload_file(dataFileName, 'prodbucket', fileToUpload) # DOESNT WORK
#s3.upload_file(dataFileName, 'prodbucket', fileToUpload) # DOESNT WORK

upload_file 方法尚未移植到存儲桶資源。 現在,您需要直接使用客戶端對象來執行此操作:

client = self.awsSession.client('s3')
client.upload_file(...)

Libcloud S3 包裝器透明地為您處理所有部分的拆分和上傳。

使用 upload_object_via_stream 方法這樣做:

from libcloud.storage.types import Provider
from libcloud.storage.providers import get_driver

# Path to a very large file you want to upload
FILE_PATH = '/home/user/myfile.tar.gz'

cls = get_driver(Provider.S3)
driver = cls('api key', 'api secret key')

container = driver.get_container(container_name='my-backups-12345')

# This method blocks until all the parts have been uploaded.
extra = {'content_type': 'application/octet-stream'}

with open(FILE_PATH, 'rb') as iterator:
    obj = driver.upload_object_via_stream(iterator=iterator,
                                          container=container,
                                          object_name='backup.tar.gz',
                                          extra=extra)

有關 S3 Multipart 功能的官方文檔,請參閱AWS 官方博客

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM