如何使用请求Python库的图像一起上传的元数据?

时间:2019-02-03 13:16:44

标签: python image post amazon-s3 request

我正在尝试使用使用presigned_post url的请求库上传图像

P.S。我不想使用boto3上传图片

我尝试过在标头/数据/文件中传递元数据,但是没有一种方法有效。这些文件已上传到S3,但在检索对象时元数据不存在。

这是用于生成策略和网址的代码

def get_presigned_post_url(bucket_name, key_name, expiry_time=300):
    presigned_post = s3.generate_presigned_post(
        Bucket=bucket_name,
        Key=key_name,
        Conditions=[
            ['content-length-range', 0, 1024*1024*25]
        ],
        ExpiresIn=expiry_time
    )

    return presigned_post['url'], presigned_post['fields']

这是我用于上传图片及其元数据的代码

bucket_name = "testbucket"
key_name = "testkey" 
post_url, fields = get_presigned_post_url(bucket_name, key_name)
config = {
        "metadata1": "value1"
}
fields['file'] = open('test.jpg', 'rb').read()
for k,v in config.items():
    headers[f"x-amz-meta-{k}"] = str(v)

response = requests.post(post_url, files=fields, headers=headers)

下面是代码用于检索对象

import boto3
import datetime

def default(o):
   if isinstance(o, (datetime.date, datetime.datetime)):
      return o.isoformat()

s3 = boto3.client('s3')
response = s3.head_object(Bucket=bucket_name, Key=key_name)
print(json.dumps(response, indent=4, default=default))

是否缺少某些内容?或者无法使用请求更新元数据? 我正在使用python 3.7和boto3 1.9.71

0 个答案:

没有答案