Boto3 и Flask: изображения не загружаются на S3 должным образом - PullRequest
0 голосов
/ 06 января 2020

Я создаю галерею для моего Flask веб-сайта, и у меня возникают проблемы при создании эскизов в моей CMS. У меня есть функция, которая берет загруженные изображения (хранящиеся в списке), я дублирую список и использую zip() для итерации по обоим спискам. Я делаю миниатюры с одним списком, загружаю полные изображения с другим списком и отправляю оба на AWS S3. Проблема в том, что я делаю эскизы, но полные изображения загружаются в виде изображений размером 0 байт. У меня также есть функция, которая переименовывает изображения. Это работает, поэтому я предполагаю, что я что-то делаю правильно.

Почему я получаю файлы размером 0 байт? Как это происходит? Что такое «очистка» файла?

@application.route("/upload", methods=['GET', 'POST'])
@login_required
def upload():
    form = UploadForm()
    uploaded_files = request.files.getlist("photo")
    conn = boto3.client(
        's3',
        region_name="region",
        aws_access_key_id='aws_access_key_id',
        aws_secret_access_key='aws_secret_access_key'
        )
    bucket_name = "bucket"
    if form.validate_on_submit():
        i = 1
        thumbs_list = list(uploaded_files)
        for z, w in zip(thumbs_list, uploaded_files):
            x = photo_rename(w)
            thumb = save_thumbnail(z)
            conn.upload_fileobj(x.stream, bucket_name, 'gallery/fulls/'+w.filename)
            conn.upload_fileobj(thumb, bucket_name, 'gallery/thumbs/'+w.filename)
            form_commit = Gallery(event=form.event.data,
                                  date=form.date.data,
                                  image_order=i,
                                  image_file_fl=w.filename,
                                  image_file_th=w.filename
                                  )
            db.session.add(form_commit)
            i += 1
        db.session.commit()
    return '', 204

1 Ответ

0 голосов
/ 06 января 2020

Мне удалось заставить обе загрузки работать, используя io.BytesIO() в моем for loop:

for z, w in zip(thumbs_list, uploaded_files):
            x = photo_rename(w)
            c = Image.open(x)
            in_mem_file = io.BytesIO()
            c.save(in_mem_file, "JPEG")
            in_mem_file.seek(0)
            thumb = save_thumbnail(z)
            conn.upload_fileobj(in_mem_file, bucket_name, 'gallery/fulls/'+w.filename)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...