python - 如何使用 boto 在 S3 中设置元数据?

标签 python amazon-s3 boto

我正在尝试在将文件推送到 S3 期间设置元数据。

这是它的样子:

def pushFileToBucket(fileName, bucket, key_name, metadata):
    full_key_name = os.path.join(fileName, key_name)
    k = bucket.new_key(full_key_name)
    k.set_metadata('my_key', 'value')
    k.set_contents_from_filename(fileName)

出于某种原因,这会在 set_metadata 处抛出错误:

boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden
<?xml version="1.0" encoding="UTF-8"?><Error><Code>SignatureDoesNotMatch</Code></Error>

当我删除此 set_metadata 部分时,文件已正确存储。 不确定我做错了什么。如果访问 key 无效,那么无论如何都不会保存文件!

最佳答案

另一种使用 upload_file 的方法:

s3 = boto3.client('s3')
path = 'foo/bar.json'
file = 'bar.json'
bucket_name = 'foobar_bucket'
extra_args = {'CacheControl': 'max-age=86400'}
s3.upload_file(path, bucket_name, file_name, extra_args)

这将在文件上设置 Cache-Control header 。

关于python - 如何使用 boto 在 S3 中设置元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34415925/

相关文章:

python - 将包含多个项目的列表插入 mysql 数据库

python - 如何使用 pandas 中的 groupby 保留在另一列上具有最高值的列的值

amazon-web-services - s3-select 查询字段名数据

python - 从 S3 Bucket Django 导入静态文件时出错

python - 全局名称 'key' 未定义

python - 如何使用 sqlalchemy 核心 api 多次正确连接同一个表?

python - 关于使用不包含在表单中的下拉菜单的 Mechanize

javascript - 有没有办法用 aws-sdk 获取已删除的 s3 对象的先前版本?

python - AWS Boto 连接仅适用于 Windows Python shell

python - 为函数定义的角色不能由 Lambda 承担