如何在 put_object 中指定标记?
Posted
技术标签:
【中文标题】如何在 put_object 中指定标记?【英文标题】:How do you specify tagging in put_object? 【发布时间】:2019-01-09 03:26:06 【问题描述】:我需要使用 put_object 指定标记,如下所示:
s3client = boto3.client('s3')
response = s3client.put_object(Bucket = dest_bucket_name, Body = body, Key = dest_key, Tagging = tagging, ACL = acl )
我的问题是标记变量使用什么数据结构?
我见过各种各样的例子,但我无法让它们发挥作用。例如:
tagging = 'TagSet' : [
'Key': 'voiceid',
'Value': polly_voice
,
'Key': 'author',
'Value': book_author
,
. . .
]
给我
"errorMessage": "Parameter validation failed:\nInvalid type for parameter Tagging, value: 'TagSet': ['Key': 'voiceid', 'Value': 'Matthew', 'Key': 'author', 'Value': 'some guy',...], type: <class 'dict'>, valid types: <class 'str'>"
我看到它需要一个字符串,但是如何指定键:值对?我发现的所有示例都使用了一些特定的数据结构,例如我的示例。
我怀疑这有什么区别,但我在 lambda 函数中这样做。
【问题讨论】:
【参考方案1】:要使其正常工作,请尝试以下代码:
tags = 'voiceid=&author='.format(polly_voice, book_author)
s3client = boto3.client('s3')
response = s3client.put_object(
Bucket=dest_bucket_name,
Body=body,
Key=dest_key,
Tagging=tags
)
您也可以参考this *** 的答案。
【讨论】:
...除非或直到您尝试使用需要进行 url 转义的字符,此答案似乎缺少该字符。【参考方案2】:对您的字典进行 URL 编码并使用 this answer 传递结果字符串
对于 Python3:
>>> import urllib.parse
>>> tags = 'key1':'value1','key2':'value2'
>>> tagging = urllib.parse.urlencode(tags)
>>> print(tagging)
key1=value1&key2=value2
【讨论】:
以上是关于如何在 put_object 中指定标记?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 HTTP Content-Type 响应头中指定字符集?
如何在 CodeNameOne 项目中指定 abiFilters?