put_object进入s3 boto3提供了损坏的文件

时间:2018-10-21 10:38:57

标签: python amazon-web-services boto3

我有一个从S3获取视频并对其执行一些操作的功能(从原始文件中获取缩略图和短视频)。

我设法下载了文件并进行了操作。但是,当我尝试上传它时,它总是给我一个损坏的文件。有人知道原因吗?

我正在使用Python 3.6和boto3。

我的代码:

thumb_img = './frames/0/40.png' #img thumb path
save_img = 'thumb_img_' + video_name.split('.')[0] + '.png'
session.put_object(ACL='public-read',
                   Body=thumb_img,
                   Key='PATH/TO/SUBFOLDER/' + save_img,
                   Bucket= BUCKET_NAME  )

有人知道为什么文件被损坏吗?

2 个答案:

答案 0 :(得分:2)

在提供文件名的同时,Body调用的put_object属性将“字节或可搜索的类似文件的对象”作为根据documentation的值。

以下代码打开文件,并提供文件描述符作为正文:

thumb_img = './frames/0/40.png' # img thumb path
save_img = 'thumb_img_' + video_name.split('.')[0] + '.png'
with open(thumb_img, 'rb') as fd:
    session.put_object(ACL='public-read',
                       Body=fd,
                       Key='PATH/TO/SUBFOLDER/' + save_img,
                       Bucket=BUCKET_NAME)

答案 1 :(得分:-1)

所以问题是我尝试直接上传文件。 put_object需要bytes or seekable file-like object。因此,解决方案是通过打开文件并获取文件的实际正文来实现的。

代码如下:

   thumb_img = './frames/1/40.png' #img thumb path
    save_img = 'thumb_img_' + video_name.split('.')[0]+'.png'

    with open(thumb_img , 'rb') as fd:
        session.put_object(ACL='public-read',
                           Body=fd,
                           Key='PATH/TO/SUBFOLDER/' + save_img,
                           Bucket=BUCKET_NAME)

感谢您的帮助。