簡體   English   中英

如何在 AWS S3 中添加緩存控制?

[英]how to add cache control in AWS S3?

我已通過 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 . -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 控制台。

  1. 瀏覽到您的 s3 存儲桶
  2. 選擇所有要更改的對象
  3. 單擊操作 -> 更改元數據
  4. 選擇 Cache-Control 作為鍵,輸入任何你想要的控件作為值
  5. 節省
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>”

您可以通過以下兩種方式使用適當的標頭向 Amazon S3 服務器發送 HTTP PUT 請求,為 Amazon S3 對象設置緩存控制自定義標頭:

使用 Amazon S3 REST API PUT 對象請求設置緩存控制元數據 - 如果您是一名程序員,您可以編寫自己的軟件程序以使用 Amazon S3 REST 或 SOAP API 設置帶有 PUT 對象請求的自定義標頭。 本網站僅提及 Amazon S3 REST API,有關如何使用 SOAP API 的詳細信息,請參閱 AWS 文檔網站。 使用 Bucket Explorer 用戶界面設置緩存控制元數據 - 如果您喜歡使用鼠標單擊而不是編寫軟件程序來設置自定義 HTTP 標頭(如緩存控制),您可以使用 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

盡管請注意,您將重寫任何現有對象。

老實說,這是最好的自動取款機方式,而不會遇到其他答案中提到的錯誤:

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 標頭”選項卡並單擊 -“添加新標頭”,然后單擊“應用更改”。 它會自動保留我的所有其他權限和標題。

如果您經常使用 S3; 無論如何,它是一個不錯的應用程序,尤其是如果您有大量上傳(ftp、dropbox 或其他方式的世界中沒有比這更好的了!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM