[英]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.