【问题标题】:How do you specify tagging in put_object?如何在 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 函数中这样做。

【问题讨论】:

    标签: python python-3.x amazon-web-services amazon-s3 boto3


    【解决方案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 stackoverflow 的答案。

    【讨论】:

    • ...除非或直到您尝试使用需要进行 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 2015-01-19
      • 1970-01-01
      • 2011-08-27
      • 2016-06-13
      相关资源
      最近更新 更多