Я пытаюсь загрузить изображение с помощью библиотеки запросов, которая использует presigned_post url
PS Я не хочу использовать boto3 для загрузки изображений
Я попытался передать метаданные в заголовки / данные /файлы, но ни один из подходов не сработал.Файлы загружаются на S3, но метаданные отсутствуют при извлечении объекта.
Вот код для генерации политики и URL
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