Python 在boto3上传文件方法中支持对象级标记

Python 在boto3上传文件方法中支持对象级标记,python,amazon-web-services,amazon-s3,boto3,awss3transfermanager,Python,Amazon Web Services,Amazon S3,Boto3,Awss3transfermanager,我想在将文件上传到S3时向文件添加标记。Boto3支持使用put_对象方法指定标记,但是考虑到预期的文件大小,我使用upload_file函数来处理多部分上载。但此函数拒绝将“标记”作为关键字参数 导入boto3 客户机=boto3.客户机('s3',地区名称='us-west-2') client.upload\u文件('test.mp4'、'bucket\u name'、'test.mp4', 外部参数={'Tagging':'type=test'}) ValueError:无效的extra

我想在将文件上传到S3时向文件添加标记。Boto3支持使用put_对象方法指定标记,但是考虑到预期的文件大小,我使用upload_file函数来处理多部分上载。但此函数拒绝将“标记”作为关键字参数

导入boto3
客户机=boto3.客户机('s3',地区名称='us-west-2')
client.upload\u文件('test.mp4'、'bucket\u name'、'test.mp4',
外部参数={'Tagging':'type=test'})
ValueError:无效的extra_args密钥“Tagging”必须是以下项之一:ACL、CacheControl、ContentDisposition、ContentEncoding、ContentLanguage、ContentType、Expires、GrantFullControl、GrantTreadACP、GrantWriteACP、元数据、RequestPayer、服务器端加密、StorageClass、SSECustomerAlgorithm、SSECustomerKey、SSECustomerKeyMD5、SSEKMSKeyId、,网站位置
我找到了一种方法,通过直接使用S3传输管理器和修改允许的关键字列表来实现这一点

从s3transfer导入s3transfer
进口boto3
客户机=boto3.客户机('s3',地区名称='us-west-2')
传输=S3传输(客户端)
transfer.ALLOWED\u UPLOAD\u ARGS.append('标记')
transfer.upload\u文件('test.mp4'、'bucket\u name'、'test.mp4',
额外参数={'Tagging':'type=test'})
即使这样做有效,我也不认为这是最好的方法。它可能会产生其他副作用。目前我无法找到正确的方法来实现这一点。任何建议都很好。谢谢。

文档将
额外参数的有效值列为:

允许上传参数=['ACL','CacheControl','ContentDisposition','ContentEncoding','ContentLanguage','ContentType','Expires','GrantFullControl','GrantTreadACP','GrantWriteACP','Metadata','RequestPayer','ServerSideEncryption','StorageClass','SSECustomerKey','SSECustomerKeyMD5','SSEKMSKeyId','WebsiteRedirectLocation']

因此,这似乎不是指定标记的有效方法


创建对象后,您可能需要调用以添加标记。

Tagging
指令现在受支持。您可以执行以下操作以添加标记:

import boto3

from urllib import parse

s3 = boto3.client("s3")

tags = {"key1": "value1", "key2": "value2"}

s3.upload_file(
    "file_path",
    "bucket",
    "key",
    ExtraArgs={"Tagging": parse.urlencode(tags)},
)