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

时间:2017-07-21 10:36:44

标签: python google-app-engine amazon-s3 boto3 webapp2

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

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

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

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

那么我在这里如何使用file_data方法访问open对象?

1 个答案:

答案 0 :(得分:0)

您应该可以省略with open部分。根据{{​​3}},您需要一个"类文件对象"作为s3.upload_fileobj()的第一个参数。请记住,self.request.POST [' file']会返回一个Boto docs you linked to对象,您可以像这样获取类似文件的对象(cgi.FieldStorage):

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实际上是source的一个实例,它具有文件类对象的Boto所需的.read()方法。所以你的最终代码看起来像这样:

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