如何使用对象标记上传到AWS S3

时间:2019-04-09 11:58:41

标签: amazon-web-services amazon-s3 aws-lambda boto3

是否可以使用标签将文件上传到AWS S3(不将标签添加到S3中的现有文件/对象)。我需要将文件与我的标签一起显示在S3中,即在一个API调用中。

我需要这个,因为我使用的Lambda函数(使用这些S3对象标签)是由S3 ObjectCreation触发的。

3 个答案:

答案 0 :(得分:1)

您可以在Tagging操作中通知put属性。

下面是使用Boto3的示例:

import boto3

client = boto3.client('s3')

client.put_object(
    Bucket='bucket', 
    Key='key',
    Body='bytes', 
    Tagging='Key1=Value1'
)

根据docs,必须将Tagging属性编码为URL查询参数。 (例如,“ Key1 = Value1”)

  

Tagging —(字符串)对象的标签集。标签集必须是   编码为URL查询参数。 (例如,"Key1=Value1"

编辑:过了一会儿我才注意到boto3标签,所以我编辑了答案以匹配boto3的相应方式。

答案 1 :(得分:1)

如果您使用client.upload_file()或具有ExtraArgs参数的其他方法上传文件,则以不同的方式指定标记:

import boto3

client = boto3.client('s3')

client.upload_file(
    Filename=path_to_your_file,
    Bucket='bucket', 
    Key='key',
    ExtraArgs={"Metadata": {"mykey": "myvalue"}}
)

S3 docs上有一个示例,但是您必须知道“元数据”与标签相对应。

s3.upload_file(
    "tmp.txt", "bucket-name", "key-name",
    ExtraArgs={"Metadata": {"mykey": "myvalue"}}
)

答案 2 :(得分:0)

boto3 现在支持

Tagging 指令。如果您使用 upload_file()

,您可以执行以下操作来添加标签
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)},
)