当前位置: 首页 > 知识库问答 >
问题:

Python Boto3 AWS多部分上载语法

蓝侯林
2023-03-14

我正在使用AWS成功地进行身份验证,并在Bucket对象上使用“put_object”方法上载文件。现在,我想使用多部分API来完成对大型文件的访问。我在这个问题中找到了公认的答案:如何使用boto3将S3对象保存到文件中

但是当试图实现时,我得到了“未知的方法”错误。我做错了什么?我的代码在下面。谢谢!

## 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

共有2个答案

危烨煜
2023-03-14

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多部分功能的官方文档,请参阅AWS官方博客。

寇鸿
2023-03-14

upload_file方法尚未移植到桶资源。现在,您需要直接使用客户端对象来执行此操作:

client = self.awsSession.client('s3')
client.upload_file(...)
 类似资料:
  • Im使用Spring Boot,并希望使用控制器接收多部分文件上传。当发送文件时,我一直得到错误415不支持的内容类型响应,并且控制器从未到达 我尝试在HTML/JSP页面和使用RESTTemplate的独立客户端应用程序中使用Form:Action发送。所有尝试的结果都是一样的 从multipart文档看来,边界参数必须添加到multipart上载,但这似乎与控制器接收不匹配 我的控制器方法设置

  • 关于Spring MVC应用程序中的多部分文件上传问题,我已经看到了很多关于stackoverflow的答案。我一步一步地确保我不会重复别人犯过的错误。 这是我的表格 在pom文件中我有依赖项 因此,当我停在调试器中时,request对象显示文件已被接收,甚至存储在jBoss临时文件夹中,我并不感到惊讶。 你能指出Spring看不到上传的文件我会错过什么吗?

  • 我正在尝试上传图像与修改库。我就是这样上传的: 请求代码: 答复: 如果我是通过客户端浏览器(如postman或DHC)发布的,则请求与上面相同,并且我得到一个成功的XML响应。 请看我在邮递员客户端上尝试的截图。它是成功的。

  • 我试图用python写的lambda (aws)完成多部分上传。下面是我正在使用的代码。大约有120个部件,总大小为30GB。下面的操作似乎没有在5分钟内完成,因此lambda关闭,上传似乎没有完成。S3提供异步多部分上传功能吗?我相信这将确保文件得到合并,不管lambda关闭。

  • 尝试使用将多个图像文件上载到 而且 我正试图在那里上传两个图像文件。发布数据/图像会产生两次此错误: 无法在S3上创建多部分上载:{“消息”:“访问被拒绝”,“堆栈”:“AccessDenied:访问被拒绝\n在Request.Extractorr(/Vagrant/Node_Modules/AWS-SDK/Lib/Services/S3.js:538:35)\n在Request.CallList