Поддержка тегов уровня объекта в методе boto3 upload_file - PullRequest
0 голосов
/ 29 мая 2019

Я хочу добавить теги к файлам по мере их загрузки на S3. Boto3 поддерживает указание тегов методом put_object, однако, учитывая ожидаемый размер файла, я использую функцию upload_file, которая обрабатывает многоэтапную загрузку. Но эта функция отклоняет тегирование в качестве аргумента ключевого слова.

import boto3
client = boto3.client('s3', region_name='us-west-2')
client.upload_file('test.mp4', 'bucket_name', 'test.mp4',
                   ExtraArgs={'Tagging': 'type=test'})

ValueError: Invalid extra_args key 'Tagging', must be one of: ACL, CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType, Expires, GrantFullControl, GrantRead, GrantReadACP, GrantWriteACP, Metadata, RequestPayer, ServerSideEncryption, StorageClass, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, SSEKMSKeyId, WebsiteRedirectLocation

Я нашел способ добиться этой цели, используя менеджер переноса S3 и изменив список разрешенных ключевых слов.

from s3transfer import S3Transfer
import boto3

client = boto3.client('s3', region_name='us-west-2')
transfer = S3Transfer(client)
transfer.ALLOWED_UPLOAD_ARGS.append('Tagging')
transfer.upload_file('test.mp4', 'bucket_name', 'test.mp4',
                     extra_args={'Tagging': 'type=test'})

Даже если это работает, я не думаю, что это лучший способ. Это может создать другие побочные эффекты. В настоящее время я не могу найти правильный путь для достижения этой цели. Будем признательны любому совету. Спасибо.

1 Ответ

0 голосов
/ 29 мая 2019

В справочнике по настройке S3 - документы Boto 3 перечислены допустимые значения для extra_args в виде:

ALLOWED_UPLOAD_ARGS = ['ACL', 'CacheControl', 'ContentDisposition', 'ContentEncoding', 'ContentLanguage', 'ContentType', 'Expires', 'GrantFullControl', 'GrantRead', 'GrantReadACP', 'GrantWriteACP', 'Метаданные', 'RequestPayer', 'ServerSideEncryption', 'StorageClass', 'SSECustomerAlgorithm ',' SSECustomerKey ',' SSECustomerKeyMD5 ',' SSEKMSKeyId ',' WebsiteRedirectLocation ']

Следовательно, это не является правильным способом указания тега.

Похоже, вам может понадобиться вызвать put_object_tagging(), чтобы добавить тег (ы) после создания объекта.

...