如何在AWS S3中添加caching控制?

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

这些文件位于(s3:// bucket-name / images /)。 我怎样才能添加caching控制的所有图像s3cmd或有任何其他方式添加标题?

谢谢

请尝试当前的上游主分支( 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/ --recursive --cache-control max-age=604800 

要在S3中调整对象的元数据(例如caching控制),而不必重新上传,也不必使用任何第三方工具,可以使用AWS CLI执行以下操作。 它将对象复制到自身,同时用您select的设置覆盖元数据:

 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>replace<bucket-name>

警告:这将覆盖所有你现有的元数据文件,如acl,只是添加额外的标志的命令,例如--acl public-read acl --acl public-read设置你所需要的(谢谢@jackson)

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

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

要testing这将做什么,你可以使用--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 
 PUT / ObjectName HTTP/1.1 Host: BucketName .s3.amazonaws.com Date: date x-amz-meta-Cache-Control : max-age= <value in seconds> Authorization: signatureValue 

每个元数据设置都包含一个键值对。 caching控制元数据键是“Cache-Control”,Value是“max-age=<time for which you want your object to be accessed from cache in seconds>”

您可以通过以下两种方式向适当的标头发送HTTP PUT请求到Amazon S3服务器,为Amazon S3对象设置高速caching控制自定义标头:

使用Amazon S3 REST API设置caching控制元数据PUT对象请求 – 如果您是程序员,则可以编写自己的软件程序以使用Amazon S3 REST或SOAP API来设置带有PUT对象请求的自定义头。 本网站仅涉及Amazon S3 REST API,请参阅AWS文档网站以获取有关如何使用SOAP API的详细信息。 使用Bucket Explorer用户界面设置caching控制元数据 – 如果您想使用鼠标点击而不是编写软件程序来设置自定义HTTP标题,如caching控制,则可以使用Bucket Explorer的用户界面。 使用此自定义HTTP标头,您可以指定请求/响应链必须遵循的caching行为,并防止caching干扰请求或响应。

有关更多信息,请参阅如何设置Amazon S3对象的caching控制头? `

只需将s3cmd升级到版本1.5.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 

虽然请注意,您将重写任何现有的对象。

另一个非常简单的方法就是使用S3浏览器: http : //s3browser.com/你可以简单地移动click或ctrl + a来select你想要的所有图像; 然后转到“Http Headers”标签并点击“添加新标题”,然后点击“应用更改”。 它会自动保留我所有的其他权限和标题。

如果你使用S3很多, 它是一个甜蜜的应用程序,尤其是如果你有很大的上传(没有什么比在ftp,dropbox或其他的世界更好!)