繁体   English   中英

使用boto3从AppEngine将文件上传到AWS S3

[英]Upload File to AWS S3 from AppEngine using boto3

如何从AppEngine应用程序将文件上传到AWS S3? 用户使用python提交文件上传表单并从AppEngine应用程序提交,我必须将文件上传到S3。

class FileUpload(webapp2.RequestHandler):
    def post(self):
        file_data = self.request.POST['file']

要将文件对象上传到S3,我们必须使用open方法。 Boto文档

with open('filename', 'rb') as data:
    s3.upload_fileobj(data, 'mybucket', 'mykey')

因此,这里如何使用open方法访问file_data对象?

您应该能够省略with open部分的。 根据您链接到的Boto文档 ,您需要一个“文件状对象”作为s3.upload_fileobj()的第一个参数。 请记住,self.request.POST ['file']返回一个cgi.FieldStorage对象,您可以像这样获得类似文件的对象( source ):

field_storage_obj = self.request.POST.get('file')
file_like_obj = self.request.POST.get('file').file
# or: file_like_obj = field_storage_obj.file

file_like_obj实际上是一个实例StringIO的 ,它具有.read()由一个类文件object.So您的最终代码的博托要求是这样的方法:

class FileUpload(webapp2.RequestHandler):
    def post(self):
        file_data = self.request.POST['file'].file
        s3.upload_fileobj(file_data, 'mybucket', 'mykey')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM