我使用s3cmd命令将20000个文件移动到了AWS S3。现在我想为所有的图片(.jpg)添加缓存控制。
这些文件位于(s3://bucket-name/images/)。我如何通过s3cmd为所有图片添加缓存控制,或者是否有其他方法可以添加标头?
谢谢
我使用s3cmd命令将20000个文件移动到了AWS S3。现在我想为所有的图片(.jpg)添加缓存控制。
这些文件位于(s3://bucket-name/images/)。我如何通过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
find . -type f -exec touch '{}' \;; aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
。 - Matt Byrne我的存储桶里有 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
--metadata-directive REPLACE --acl public-read
。 - Flimm--acl public-read
。 - Matt Gaunt使用AWS CLI,您可以对S3中的对象进行元数据调整(例如缓存控制),而无需重新上传它或使用任何第三方工具。以下是操作步骤:将对象复制到自身并用您选择的设置覆盖元数据:
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)
--acl public-read
命令运行。 - Jackson如果您想避免使用第三方工具,并且这是一次性任务,您可以使用AWS控制台。
PUT / ObjectName HTTP/1.1
Host: BucketName .s3.amazonaws.com
Date: date
x-amz-meta-Cache-Control : max-age= <value in seconds>
Authorization: signatureValue
“max-age=<以秒为单位希望从缓存访问对象的时间>”
您可以通过两种方式向Amazon S3对象设置缓存控制自定义标头,发送HTTP PUT请求到Amazon S3服务器并使用适当的标头:这是目前最好的方法,而且不会遇到其他答案中提到的错误:
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
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
另一个非常简单的方法是使用S3浏览器:http://s3browser.com/ 您只需按住Shift键单击或Ctrl + A选择您想要的所有图像;然后转到“Http Headers”选项卡,单击“添加新标头”,然后单击“应用更改”。它会自动保留所有其他权限和标头。
如果您经常使用S3,则这是一个很好的应用程序,特别是如果您有大量上传(在ftp、dropbox或其他方面没有比它更好的东西!)
Content-Type
的 bug 已经在 #406 中得到修复。 - josh3736