在boto3 upload_file方法对象级标记支持(Support for object lev

2019-10-29 06:58发布

我想要的标签,我将它们上传到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'})

尽管这个作品,我不认为这是最好的方式。 这可能会造成其他副作用。 目前,我没有能够找到正确的方式来实现这一目标。 任何意见将是巨大的。 谢谢。

Answer 1:

在S3定制参考-博托3文档文件列出了有效值extra_args为:

ALLOWED_UPLOAD_ARGS = [ 'ACL', 'CacheControl', 'ContentDisposition', 'ContentEncoding', 'ContentLanguage', '的ContentType', '截止日期', 'GrantFullControl', 'GrantRead', 'GrantReadACP', 'GrantWriteACP', '元数据' , 'RequestPayer', 'ServerSideEncryption', 'StorageClass', 'SSECustomerAlgorithm', 'SSECustomerKey', 'SSECustomerKeyMD5', 'SSEKMSKeyId', 'WebsiteRedirectLocation']

因此,这并不似乎是指定一个标签的有效方式。

看来,你可能需要调用put_object_tagging()创建对象之后添加标签(一个或多个)。



文章来源: Support for object level Tagging in boto3 upload_file method