如何从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
对象?
答案 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')