簡體   English   中英

Boto3:無法在放置/上傳時設置元數據

[英]Boto3: Unable to set Metadata on put/upload

如下代碼:

client = boto3.client(
    's3',
    aws_access_key_id='AKIA...',
    aws_secret_access_key='',
    aws_session_token=True
        )
client.put_object(
    Bucket=input_bucket,
    Key=file_name_final,
    Body=open(tmp_file_name, 'r'),
    Metadata={'a':'b'}
)

崩潰:

Metadata={'a':'b'} TypeError: Unicode-objects must be encoded before hashing

另一方面,使用Resource:

s3 = boto3.resource(
    's3',
    aws_access_key_id='AKIA...',
    aws_secret_access_key='m/twhd6ow8aRuf+gjQcL8gu+bS5Y3tAVjcTe1+ai',
    aws_session_token=True
)
my_bucket = s3.Bucket(input_bucket)
upfile = my_bucket.Object(file_name_final);
meta = {'a':'b'}
upfile.upload_file(
    tmp_file_name,
    ExtraArgs={"Metadata":meta}
)

使用ExtraArgs={"Metadata":meta} : AttributeError: 'bool' object has no attribute 'split'崩潰ExtraArgs={"Metadata":meta} : AttributeError: 'bool' object has no attribute 'split'

我想我已經嘗試了str('b','utf-8 / ascii')、. encode()和.decode()的所有變體,以及一些非常愚蠢的東西,但是沒有。 救命?

試試看

import boto3
s3 = boto3.resource('s3')
s3.Object('input_bucket', 'file_name_final').put(Body='hello world', Metadata={'foo': 'bar'})

參考: boto3-s3-put-documentation

如果您只想上傳,我用過:

s3=boto3.client('s3')
s3.upload_file("file","destinationBucket","destinationFile",ExtraArgs={"Metadata":{"meta1:val1","meta2:val2"})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM