Есть ли способ загрузить файл в AWS S3 с тегами (не добавлять теги к существующему файлу/объекту в S3). Мне нужно, чтобы файл появился в S3 с моими тегами, то есть в одном вызове API.
Мне это нужно, потому что я использую лямбда-функцию (которая использует эти теги объектов S3) запускается S3 ObjectCreation
Вы можете сообщить атрибуту Tagging
об операции put
.
Вот пример использования Boto3
:
import boto3
client = boto3.client('s3')
client.put_object(
Bucket='bucket',
Key='key',
Body='bytes',
Tagging='Key1=Value1'
)
В соответствии с документы атрибут Tagging
должен быть закодирован как параметры запроса URL. (Например, "Ключ1=Значение1")
Tagging — (String) The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example,
"Key1=Value1"
)
РЕДАКТИРОВАТЬ: Я заметил тег boto3
только через некоторое время, поэтому я отредактировал свой ответ, чтобы он соответствовал тому, как это делает boto3.
Используйте &
в качестве разделителя между значениями тегов, такими как "Key1=Value1"&"Key2=Value2"
. Если вам нужно загрузить без значения, это просто "Key1&Key2&Key3"
.
Если вы загружаете файл с помощью 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, но вы должны знать, что «метаданные» соответствуют тегам имейте в виду, что метаданные — это не совсем то же самое, что теги, хотя они могут функционировать аналогично.
s3.upload_file(
"tmp.txt", "bucket-name", "key-name",
ExtraArgs = {"Metadata": {"mykey": "myvalue"}}
)
Tagging
директива теперь поддерживается бото3. Вы можете сделать следующее, чтобы добавить теги, если вы используете 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)},
)
Отлично спасибо. Это также работает с другими методами, такими как upload_fileobj с параметром
ExtraArgs
.