在我的烧瓶应用程序中,我正在使用一个函数将文件上传到亚马逊s3,使用Boto。
大多数情况下它的工作正常,但有时它上传文件为零字节文件,没有扩展名。
为什么有时失败,
我正在验证表单中的用户图像文件。
FileField('Your photo',validators=[FileAllowed(['jpg', 'png'], 'Images only!')])
我的图片上传功能。
def upload_image_to_s3(image_from_form):
#upload pic to amazon
source_file_name_photo = secure_filename(image_from_form.filename)
source_extension = os.path.splitext(source_file_name_photo)[1]
destination_file_name_photo = uuid4().hex + source_extension
s3_file_name = destination_file_name_photo
# Connect to S3 and upload file.
conn = boto.connect_s3('ASJHjgjkhSDJJHKJKLSDH','GKLJHASDJGFAKSJDGJHASDKJKJHbbvhjcKJHSD')
b = conn.get_bucket('mybucket')
# Connect to S3 and upload file.
sml = b.new_key("/".join(["myfolder",destination_file_name_photo]))
sml.set_contents_from_string(image_from_form.read())
acl='public-read'
sml.set_acl(acl)
return s3_file_name
答案 0 :(得分:1)
您的资产有多大?如果上传量太大,您可能需要对其进行多部分/分块,否则会超时。
bucketObject.initiate_multipart_upload('/local/object/as/file.ext')
这意味着您不会使用set_contents_from_string,而是存储和上传。你可能不得不使用一些东西来查看文件,比如FileChuckIO。
如果这适用于您,可以使用此示例:http://www.bogotobogo.com/DevOps/AWS/aws_S3_uploading_large_file.php
此外,您可能需要编辑上面的帖子并更改您的AWS密钥。