以下代码:
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
另一方面,使用资源:
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'
我想我已尝试过str(' b',' utf-8 / ascii'),。encode()和.decode()的所有变体,而且有些非常愚蠢事情,但没有。救命?
答案 0 :(得分:0)
试试这个。
import boto3
s3 = boto3.resource('s3')
s3.Object('input_bucket', 'file_name_final').put(Body='hello world', Metadata={'foo': 'bar'})
答案 1 :(得分:0)
如果您只想上传我使用过:
s3=boto3.client('s3')
s3.upload_file("file","destinationBucket","destinationFile",ExtraArgs={"Metadata":{"meta1:val1","meta2:val2"})