繁体   English   中英

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

[英]put_object into s3 boto3 gives a damaged file

我有一个从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  )

有谁知道为什么文件损坏?

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

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

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)

因此,问题在于我尝试直接上传文件。 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)

谢谢您的帮助..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM