Python 在boto3上传文件方法中支持对象级标记
我想在将文件上传到S3时向文件添加标记。Boto3支持使用put_对象方法指定标记,但是考虑到预期的文件大小,我使用upload_file函数来处理多部分上载。但此函数拒绝将“标记”作为关键字参数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
导入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)},
)