88

我已通过 s3cmd 命令将 20000 个文件移动到 AWS S3。现在我想为所有图像(.jpg)添加缓存控制

这些文件位于 ( s3://bucket-name/images/ )。如何通过 s3cmd 为所有图像添加缓存控制,或者有没有其他方法可以添加标题?

谢谢

4

10 回答 10

87

请尝试当前的上游 master 分支(https://github.com/s3tools/s3cmd),因为它现在有一个modify命令,使用如下:

./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
于 2014-03-20T03:34:14.440 回答
70

还有 AWS 自己的客户端:

aws s3 sync /path s3://yourbucket/ --cache-control max-age=604800
于 2014-09-13T16:40:34.600 回答
36

我的存储桶有 mp4、jpg 和其他文件。我要更新的文件存储在“子存储桶”中(例如:https ://s3.amazonaws.com/my.bucket/sub-directory/my-video.mp4 )。就我而言,我只想更新 mp4 文件的缓存控制:

aws s3 cp \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive

要测试这会做什么,您可以使用以下--dryrun标志:

aws s3 cp --dryrun \
   s3://my.bucket/sub-directory/ s3://my.bucket/sub-directory/ \
   --exclude '*.jpg' --exclude '*.png' \
   --cache-control 'max-age=31104000' \
   --recursive
于 2016-10-06T13:56:29.757 回答
27

要在 S3 中调整对象的缓存控制等元数据,而无需重新上传对象,也无需使用任何第三方工具,您可以使用 AWS CLI 执行以下操作。它将对象复制到自身,同时使用您选择的设置覆盖元数据:

aws s3api copy-object --copy-source <bucket-name>/<file> --bucket <bucket-name> --key <file> --metadata-directive REPLACE --cache-control "max-age=3600"

如您所述,在 find 中处理此命令以对存储桶中已存在的现有文件集执行此操作:

find . -type f -exec aws s3api copy-object --copy-source <bucket-name>/{} --bucket <bucket-name> --key {} --metadata-directive REPLACE --cache-control "max-age=3600"

替换<bucket-name>为您的存储桶的名称

警告:这将覆盖文件上所有现有的元数据,例如 acl,只需在命令中添加其他标志以设置您需要的内容,例如,--acl public-read提供完全的公共访问权限。(感谢@jackson)

于 2016-06-02T04:58:27.813 回答
17

如果您想避免使用第三方工具,并且这是一项一次性任务,您可以使用 AWS 控制台。

  1. 浏览到您的 s3 存储桶
  2. 选择要更改的所有对象
  3. 单击操作 -> 更改元数据
  4. 选择 Cache-Control 作为键,输入您想要的任何控件作为值
  5. 节省
于 2019-08-19T17:08:25.587 回答
3
于 2014-03-19T09:40:33.970 回答
1

(因为OP要求任何其他方式)

您也可以通过 来完成aws-cli,例如 (v: aws-cli/1.8.8 Python/2.7.2 Darwin/12.5.0):

aws s3api put-object \
--bucket mybucket \
--key my/key \
--cache-control max-age=1 \
--body myfile.txt

尽管请注意您将重写任何现有对象。

于 2015-10-22T12:30:33.463 回答
1

老实说,这是最好的 atm 方式,不会遇到其他答案中提到的错误:

aws s3 cp s3://my-bucket/ s3://my-bucket/ --recursive --metadata-directive REPLACE \
--expires 2034-01-01T00:00:00Z --acl public-read --cache-control max-age=2592000,public
于 2021-03-19T17:07:05.990 回答
0

只需将 s3cmd 升级到 1.5.1 版本,问题就会解决。

于 2015-05-14T05:39:22.990 回答
0

另一种非常简单的方法是使用 S3 浏览器:http ://s3browser.com/您只需 shift click 或 ctrl+a 即可选择您想要的所有图像;然后只需转到“Http Headers”选项卡并单击 - “Add new header” & 然后“Apply changes”。它自动保留了我所有的其他权限和标题。

如果你经常使用 S3;无论如何,它是一个甜蜜的应用程序,尤其是如果你有大量的上传(在 ftp、dropbox 或其他的世界里没有比这更好的了!)

于 2017-09-25T17:31:01.617 回答