Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用PutObject操作s3 boto时的BadDigest_Python_Amazon S3_Boto3 - Fatal编程技术网

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'