【发布时间】:2018-10-04 01:59:10
【问题描述】:
我正在尝试使用 Python 请求包将图像文件上传到我的 Amazon AWS S3 存储桶。
我的代码打开存储桶,下载图像文件,调整图像大小,将图像保存在本地,然后尝试将保存的图像上传到 S3 存储桶。
一切正常,只是上传的 jpg 文件在某种程度上已损坏,以至于无法再将其视为图像。我检查了正在上传的原始文件没有损坏。
我的代码是:
conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(settings.AWS_STORAGE_BUCKET_NAME)
for key in bucket.list(prefix='media/userphotos'):
file_name=key.name
full_path_filename = 'https://' + settings.AWS_STORAGE_BUCKET_NAME + '.s3.amazonaws.com/' + file_name
fd_img = urlopen(full_path_filename);
img = Image.open(fd_img)
img = resizeimage.resize_width(img, 800)
new_filename = full_path_filename.replace('userphotos', 'webversion')
# Save temporarily before uploading to S3 bucket
img.save('temp.jpg', img.format)
the_file = {'media': open('temp.jpg', 'rb')}
r = requests.put(new_filename, files=the_file, auth=S3Auth(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY))
fd_img.close()
更新
我刚刚注意到,虽然无法使用 Web 浏览器或 Mac 上的 Preview 打开 jpg 文件,但可以使用 Adobe Photoshop 成功打开它!很明显,图像在文件中,但requests.put() 创建的 jpg 文件有一些内容,该文件正在对文件执行某些操作,阻止它被 Web 浏览器读取。奇怪!
【问题讨论】:
-
本地文件
temp.jpg可以在浏览器中显示吗?如果你get()只是put()的文件,它会返回不同吗? -
是的,本地 temp.jpg 可以在网络浏览器中显示。
-
您找到解决方案了吗?我有一个非常相似的问题,但我使用 requests.post 将图像文件上传到个人管理的 Apache Web 服务器而不是 AWS。
-
嗨。这事有进一步更新吗?我也有这个问题。我的设置与 Brendan 的设置相同。 request.post 与托管 Apache 服务器。
标签: python amazon-web-services amazon-s3