我有一个从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 )
有人知道为什么文件被损坏吗?
答案 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)
感谢您的帮助。