Python 调用PutObject操作s3 boto时的BadDigest
这个代码很好用Python 调用PutObject操作s3 boto时的BadDigest,python,amazon-s3,boto3,Python,Amazon S3,Boto3,这个代码很好用 import boto3 def upload(request): try: get_file = request.POST['file'].file d_filename = 'foo-'+uuid.uuid4().hex s3 = boto3.resource('s3') s3.Bucket('Bucket_name').put_object(Key=d_filename, Body=get_file,
import boto3
def upload(request):
try:
get_file = request.POST['file'].file
d_filename = 'foo-'+uuid.uuid4().hex
s3 = boto3.resource('s3')
s3.Bucket('Bucket_name').put_object(Key=d_filename, Body=get_file, ContentType=ContentType)
return d_filename
except Exception, e:
log.error(str(e))
return 'error'
但当我想将文件的md5哈希放入文件名时,它会抛出错误——“调用PutObject操作时发生错误(BadDigest)(达到最大重试次数:4):您指定的内容md5与我们收到的内容不匹配。”
我没有试图计算已上载文件的md5,也没有尝试将其设置为文件,但希望文件名中包含md5。@snakecharmerb base64.b64encode(hashlib.md5(open('Local/Path/to/file').read()).digest())没有帮助。
get_file.read()
可能会离开get_file
指向EOF。我打赌您需要将其搜索回偏移量0。胡乱猜测:在构建哈希和使用put\u object()之间添加get\u file.seek(0,0)
。@Michael sqlbot感谢Michael的帮助。
import boto3
import hashlib
def upload(request):
try:
get_file = request.POST['file'].file
d_filename = 'foo-'+str(hashlib.md5(get_file.read()).hexdigest())
s3 = boto3.resource('s3')
s3.Bucket('Bucket_name').put_object(Key=d_filename, Body=get_file, ContentType=ContentType)
return d_filename
except Exception, e:
log.error(str(e))
return 'error'