boto3如何用元数据创建对象?

Duk*_*gal 5 amazon-s3 boto amazon-web-services boto3

在下面的示例中,我想在创建S3对象时设置时间戳元数据属性.我怎么做?文件不清楚.

import uuuid
import json
import boto3
import botocore
import time

from boto3.session import Session
session = Session(aws_access_key_id='XXX',
                  aws_secret_access_key='XXX')

s3 = session.resource('s3')

bucket = s3.Bucket('blah')

for filename in glob.glob('json/*.json'):
    with open(filename, 'rb') as f:
        data = f.read().decode('utf-8')
        timestamp = str(round(time.time(),10))
        my_s3obj = s3.Object('blah', str(uuid.uuid4())).put(Body=json.dumps(data))
Run Code Online (Sandbox Code Playgroud)

Mou*_*dri 9

至于boto3,你必须在boto3网站详细介绍了upload_file可能性在这里.

import boto3
#Create the S3 client
s3ressource = client(
    service_name='s3', 
    endpoint_url= param_3,
    aws_access_key_id= param_1,
    aws_secret_access_key=param_2,
    use_ssl=True,
    )
Run Code Online (Sandbox Code Playgroud)

上传文件时,您必须指定密钥(基本上是您的robject /文件名),并且在创建密钥时添加元数据将使用"ExtraArgs"选项完成:

s3ressource.upload_file(Filename, bucketname, key, ExtraArgs={"Metadata": {"metadata1":"ImageName","metadata2":"ImagePROPERTIES" ,"metadata3":"ImageCREATIONDATE"}})
Run Code Online (Sandbox Code Playgroud)

  • 不错的答案-一个小的补充:如果要修改已定义的对象元数据键之一(内容编码,内容类型等),则必须直接在`ExtraArgs`中使用它们(即`ExtraArgs = {“ ContentEncoding”: “ gzip”}`) (2认同)

Dav*_*les 5

您可以将对象的元数据指定为键/值对,如下所示:

s3.Object('bucket-name', 'uuid-key-name').put(Body='data', 
                                              Metadata={'key-name':'value'})
Run Code Online (Sandbox Code Playgroud)

有关可在内部使用的其他参数,请参见boto3文档put()