我已通过 s3cmd 命令将 20000 个文件移动到 AWS S3。现在我想为所有图像(.jpg)添加缓存控制
这些文件位于 ( s3://bucket-name/images/ )。如何通过 s3cmd 为所有图像添加缓存控制,或者有没有其他方法可以添加标题?
谢谢
我已通过 s3cmd 命令将 20000 个文件移动到 AWS S3。现在我想为所有图像(.jpg)添加缓存控制
这些文件位于 ( s3://bucket-name/images/ )。如何通过 s3cmd 为所有图像添加缓存控制,或者有没有其他方法可以添加标题?
谢谢
请尝试当前的上游 master 分支(https://github.com/s3tools/s3cmd),因为它现在有一个modify
命令,使用如下:
./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
还有 AWS 自己的客户端:
aws s3 sync /path s3://yourbucket/ --cache-control max-age=604800
我的存储桶有 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
要在 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)
如果您想避免使用第三方工具,并且这是一项一次性任务,您可以使用 AWS 控制台。
(因为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
尽管请注意您将重写任何现有对象。
老实说,这是最好的 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
只需将 s3cmd 升级到 1.5.1 版本,问题就会解决。
另一种非常简单的方法是使用 S3 浏览器:http ://s3browser.com/您只需 shift click 或 ctrl+a 即可选择您想要的所有图像;然后只需转到“Http Headers”选项卡并单击 - “Add new header” & 然后“Apply changes”。它自动保留了我所有的其他权限和标题。
如果你经常使用 S3;无论如何,它是一个甜蜜的应用程序,尤其是如果你有大量的上传(在 ftp、dropbox 或其他的世界里没有比这更好的了!)