PHP用のAmazon SDKを使用し、画像にキャッシュコントロールヘッダーを設定しようとしています。 MetaData = array( "Cache-Control")で追加しようとすると、S3バケットにログインするとx-amz-meta-cache-controlに変更され、ファイルをダウンロードするとキャッシュはありません-control set。しかし、私がこの設定を手動で変更すると、Cache-controlは完全に機能します。アップロード時にプログラムでHTTPリクエストヘッダーを設定するために使用できないパラメータがありますか?私はPutObjectメソッドを使用しています。PHPからS3オブジェクトのCache-Control HTTPヘッダを設定するAWS SDK
9
A
答えて
16
キャッシュコントロールが "MetaData"インデックスで設定されていない場合、 "CacheControl"は "MetaData"と同じレベルにあり、その中には含まれていません。あなたがのputObject()メソッドのためのコンフィギュレーション配列として、このようなものを使用したい
http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_putObject
...アップロード()メソッドについては
$s3client->putObject(array(
'Bucket' => '...',
'key' => '...',
'body' => '...',
'CacheControl' => 'max-age=172800',
'MetaData' => array(
'metaKey' => 'metaValue',
'metaKey' => 'metaValue'
)));
...
$s3client->upload(
'bucket',
'key',
fopen('sourcefile','r'),
'public-read',
array('params' => array(
'CacheControl' => 'max-age=172800',
'Metadata' => array(
'metaKey' => 'metaValue',
'metaKey' => 'metaValue'
))));
また、upload()
は、サイズが5MBのファイルの場合は、それ以外の場合はマルチパートアップロード要求が開始されます。
8
バケツに既に入っているアイテムにCacheControl
ヘッダーを追加する場合は、SDKのcopyObject
メソッドを使用します。 MetadataDirective
paramを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'
));
関連する問題
私の答えに役立つ場合は、「受け入れ済み」と表示してください。 – Scuzzy