我已经能够弄清楚如何使用AWS控制台在单个文件上设置http标头,cache-control:max_age。但是,我想对S3存储桶中的所有文件执行此操作。
如何在一个存储桶中说出500个文件呢?我不能使用AWS控制台为每个单独的文件执行此操作。
如果您无法通过AWS完成此操作。你能推荐第三方应用吗?
谢谢, 杰夫
答案 0 :(得分:2)
修改对象元数据的唯一方法是制作对象的副本并设置元数据。在复制操作中,您将相同的对象设置为源和目标。
- http://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjectsExamples.html
这是控制台在幕后为您执行的操作。没有提供批处理操作。
您需要编写一些代码来遍历存储桶中的对象,并为需要修改的每个对象call the api进行迭代。
或者,找到一个可以为您做到这一点的工具或库。哪个工具以及在哪里找到它是Stack Overflow范围之外的问题。
答案 1 :(得分:1)
awscli允许这样做。我不建议在混合了元数据的存储桶上运行它。例如,如果您有一些经过KMS加密的对象,则下面的示例将重写没有这些凭据的所有对象。
如果您添加了--recursive
开关,这将在存储桶中的每个对象上设置内容类型标题。
aws s3 cp \
s3://bucket-name/ \
s3://bucket-name/ \
--metadata-directive REPLACE \
--content-type text/plain
为了安全地执行此操作,我将使用python脚本或在CLI上选择性地对每个项目一次执行一次,以确保前后的元数据相同,并且仅包含附加信息。
您可以使用aws s3api
。
aws \
s3api head-object \
--bucket s3://bucket-name/ \
--key some-secret
{
"AcceptRanges": "bytes",
"LastModified": "2020-06-17T21:07:35+00:00",
"ContentLength": 56,
"ETag": "snip",
"VersionId": ".aWa93h._.g_NEYcJgt_7MXJWzALyqSa",
"ContentType": "text/plain",
"ServerSideEncryption": "aws:kms",
"Metadata": {},
"SSEKMSKeyId": "arn:aws:kms:us-east-1:snip:key/snip"
}
因此,如果运行第一个replace awscli命令,它将删除策略的SSEKMSKeyId
键。为此,我们还必须将以下开关添加到顶部的第一个命令中。
--sse-kms-key-id "arn:aws:kms:us-east-1:snip:key/snip" \
--sse aws:kms
答案 2 :(得分:0)
此功能已得到改进,您可以在控制台中编辑文件夹元数据,只需选择文件夹或文件,按Actions
,选择Change Metadata
,将显示像这样的面板:
在https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html
中