Lee*_*fin 1 python amazon-s3 boto
我使用Amazon boto v2.38编写python脚本来访问我的S3存储桶.
我想更新我的存储桶中的文件(我知道它在S3中称为" 密钥 ").路径是MyBucket/myfile/demo.txt.此外,我还想更新名为" "的元数据name.这是我试过的代码:
# connect to key
conn = boto.connect_s3()
bucket = conn.get_bucket("MyBucket")
my_key = Key(bucket)
my_key.key = "myfile/demo.txt"
# if key exists, then update the file & its metadata
if my_key.exists():
new_meta_data = {"name": "xyz"}
# update metadata
my_key.copy("MyBucket", my_key.name, new_meta_data, preserve_acl=True)
# update file content in S3 by using the local file demo.txt
my_key.set_contents_from_filename("demo.txt")
Run Code Online (Sandbox Code Playgroud)
但是,它不起作用......我没有看到元数据得到更新.为什么?
您只需更新密钥的本地元数据,然后执行文件更新:
import boto
conn = boto.connect_s3()
bucket = conn.get_bucket("MyBucket")
key = bucket.get_key('myfile/demo.txt')
key.set_metadata('name', 'xyz')
key.set_contents_from_filename('demo.txt')
Run Code Online (Sandbox Code Playgroud)
现在name应该在S3中显示为元数据.但请注意,执行此操作时ACL可能会更改.
它也可以用key.set_remote_metadata().这不要求您更新密钥的内容(但如果需要,您可以):
conn = boto.connect_s3()
bucket = conn.get_bucket('MyBucket')
key = bucket.get_key('myfile/demo.txt')
key.set_remote_metadata({'name': 'xyz'}, {}, True)
Run Code Online (Sandbox Code Playgroud)