簡體   English   中英

從PHP AWS SDK設置S3對象的緩存控制HTTP標頭

[英]Set Cache-Control HTTP Header for S3 Objects from PHP AWS SDK

我使用適用於PHP的Amazon SDK並嘗試在映像上設置Cache-Control Header。 當我嘗試通過MetaData = array(“ Cache-Control”)添加它時,當我登錄到S3存儲桶時,將其更改為x-amz-meta-cache-control,並且在下載文件時,沒有緩存控制集。 但是,如果我手動更改此設置,則Cache-control可以完美運行。 是否缺少一些我可以用來在上傳時以編程方式設置HTTP請求標頭的參數? 我正在使用PutObject方法。 我相信AWS開發工具包來自2013年。

緩存控件未通過“ MetaData”索引設置,“ CacheControl”與“ MetaData”處於同一級別,未包含在其中。

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_putObject

您將使用類似這樣的東西作為putObject()方法的配置數組...

$s3client->putObject(array(
  'Bucket' => '...',
  'key' => '...',
  'body' => '...',
  'CacheControl' => 'max-age=172800',
  'MetaData' => array(
    'metaKey' => 'metaValue',
    'metaKey' => 'metaValue'
)));

對於upload()方法...

$s3client->upload(
  'bucket',
  'key',
  fopen('sourcefile','r'),
  'public-read',
  array('params' => array(
    'CacheControl' => 'max-age=172800',
    'Metadata' => array(
      'metaKey' => 'metaValue',
      'metaKey' => 'metaValue'
))));

另外,值得指出的是, upload()會為5MB的文件包裝putObject() ,否則會發起分段上傳請求。

如果要將CacheControl標頭添加到存儲桶中已存在的項目中,請使用SDK的copyObject方法。 MetadataDirective參數設置為REPLACE以使該項目覆蓋自身。

我注意到一件奇怪的事情:即使已經設置了ContentType標頭,我也必須設置它。 否則,該圖像將不會在瀏覽器中內聯顯示,而是作為下載提供。

$result = $s3->copyObject(array(
    'ACL' => 'public-read',
    'Bucket' => $bucket, // target bucket
    'CacheControl' => 'public, max-age=86400',
    'ContentType' => 'image/jpeg', // !!
    'CopySource' => urlencode($bucket . '/' . $key),
    'Key' => $key, // target file name
    'MetadataDirective' => 'REPLACE'
));

暫無
暫無

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

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