2015-03-30 4 views
1

В моем приложении для флэков я использую функцию для загрузки файла на Amazon s3, используя Boto.Проблема с загрузкой файла Amazon S3 с использованием «BOTO» в моем приложении для фляшек -Python

Его работоспособность в большинстве случаев, но несколько раз его загрузка файлов в виде файла с нулевым байтом без расширения.

Почему его неудачу иногда,

Я проверка файла изображения пользователя в форме.

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

Код выглядит хорошо для меня. добавьте mimetype 'sml.set_metadata ('Content-Type', 'image/png')' он может помочь. – kartheek

+0

Получаете ли вы сообщение об ошибке с S3? – garnaat

ответ

0

Насколько велики ваши активы? Если загрузка слишком велика, возможно, вам придется размножать/блокировать ее, иначе она будет таймаутом.

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.

+0

Я просто загружаю изображения., 1Kb -2 МБ, я не получаю никакого эррового ответа от S3 – anusha

+0

Я бы проверял поведение FileAllowed v/s FileRequired. FileAllowed похоже, что он будет принудительно выполнять FileRequired, но он не является явным в документации (http://flask-wtf.readthedocs.org/en/latest/api.html#flask_wtf.file.FileRequired). Возможно ли, чтобы представления были пустыми, и он не возвращает расширение (потому что сбой .split) и нулевые байты, потому что пустой файл равен нулю. – cgseller

+0

Спасибо за ответ, я не добавил желаемого гладиатора для этого входного файла, я добавил, что для файла HTML и моего :-) – anusha

Смежные вопросы