python - Boto3 和 Flask:图像未正确上传到 S3
问题描述
我正在为我的 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
解决方案
我能够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)
推荐阅读
- google-apps-script - 如何在空行后找到单元格行迭代
- php - Shopify REST API - 如何连接?
- qt - 编译时不存在自定义属性?“不能分配给不存在的财产”
- c# - 如何将 curl 请求转换为具有 --resolve 的 HttpClient
- html - 有没有办法让 GIF 在鼠标悬停时播放并暂停?
- arrays - 我不明白为什么我的代码适用于我的结构数组,但不适用于包含该结构数组的结构?
- sql - 将监视添加到 SQL 选择语句
- perl - 启用用户选项以覆盖变量的值
- python - How can I find the file name in a directory?
- python - 如何在包含数据的现有数组中添加一层、一排和一列额外的列