我已通过s3cmd命令将20000个文件移至AWS S3。现在我想为所有图像(.jpg)添加缓存控制
这些文件位于(s3:// bucket-name / images /)中。如何通过s3cmd为所有图像添加缓存控制,或者是否有其他添加头的方法?
谢谢
Answers:
请尝试当前的上游master分支(https://github.com/s3tools/s3cmd),因为它现在具有一个modify
命令,如下所示:
./s3cmd --recursive modify --add-header="Cache-Control:max-age=86400" s3://yourbucket/
Content-Type
错误似乎已通过#406修复。
同样使用AWS自己的客户端:
aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
find . -type f -exec touch '{}' \;; aws s3 sync /path s3://yourbucket/ --recursive --cache-control max-age=604800
--recursive
仍然有必要吗?CLI文档似乎并未将其列出为参数。docs.aws.amazon.com/cli/latest/reference/s3/sync.html
touch '{}'
如上所述使用将更改文件的修改日期,这可能是不希望的。要设置cache-control
现有文件,请参见下面的@ rodrigo-silveira答案。
我的存储桶中有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
。
--acl public-read
要调整元数据(例如,对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 . -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
。
PUT / ObjectName HTTP/1.1
Host: BucketName .s3.amazonaws.com
Date: date
x-amz-meta-Cache-Control : max-age= <value in seconds>
Authorization: signatureValue
每个元数据设置都包含一个键值对。缓存控制元数据键为“ Cache-Control”,值为“max-age=<time for which you want your object to be accessed from cache in seconds>”
您可以通过两种方式通过将HTTP PUT请求发送到具有适当头的Amazon S3服务器来为Amazon S3对象设置缓存控制自定义头:
使用Amazon S3 REST API PUT对象请求设置缓存控制元数据-如果您是程序员,则可以编写自己的软件程序以使用Amazon S3 REST或SOAP API设置带有PUT对象请求的自定义标头。该网站仅引用Amazon S3 REST API,请访问AWS文档网站以获取有关如何使用SOAP API的详细信息。使用Bucket Explorer用户界面设置缓存控制元数据-如果您希望通过单击鼠标(而不是编写软件程序)来设置自定义HTTP标头(如Cache Control),而无需编写软件程序,则可以使用Bucket Explorer的用户界面。使用此自定义HTTP标头,可以指定请求/响应链必须遵循的缓存行为,并防止缓存干扰请求或响应。
有关更多信息,请检查如何为Amazon S3对象设置缓存控制标头?`
(由于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
尽管请注意,您将重写任何现有对象。
只需将s3cmd升级到1.5.1版,此问题即可解决。
另一个非常简单的方法是使用S3浏览器:http : //s3browser.com/您可以简单地通过单击click或ctrl + a来选择所需的所有图像。然后只需转到“ Http标头”标签,然后点击-“添加新标头”,然后单击“应用更改”。它会自动保留所有其他权限和标头。
如果您大量使用S3;无论如何,它都是一个不错的应用程序,特别是如果您上传的文件很多(在ftp,dropbox或其他方面没有比这更好的了!)