Python requests.put()破坏了上传的图像文件

时间:2016-11-30 16:51:24

标签: python amazon-web-services amazon-s3

我正在尝试使用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()

更新

我刚刚注意到,虽然jpg文件无法使用网络浏览器或Mac上的预览打开,但可以使用Adobe Photoshop成功打开!显然,图像在文件中,但有一些关于由requests.put()创建的jpg文件,它正在对文件做一些事情,阻止它被Web浏览器读取。奇怪!

1 个答案:

答案 0 :(得分:1)

执行此操作:

requests.put(url, data=open(filename, 'rb'))

我注意到,使用请求库中记录的“文件”会给文件添加大量垃圾。您使用xxd <filename>

进行检查