2011-10-04 7 views
2

イメージをアップロードするのにAmazon S3 PHPクラスを使用していますが、キャッシュヘッダーが設定されていません。ここで私が使っている電話があります。Amazon S3がイメージをキャッシュしない

$s3->putObjectFile(
    $image_location, 
    "bucketname", 
    $image_file_name, 
    S3::ACL_PUBLIC_READ, 
    array(
     "Cache-Control" => "max-age=315360000", 
     "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years")) 
    ) 
); 

私がアップロードされた画像のために取得していたヘッダの応答は次のとおりです。

 
Date: Tue, 04 Oct 2011 04:21:09 GMT 
x-amz-request-id: B6BAAAAD9B460160 
Content-Length: 34319 
x-amz-id-2: Oxxx1hIG2nNKfff3vgH/xx/dffF59O/7a1UWrKrgZlju2g/8WvTcBpccYToULbm 
Last-Modified: Tue, 04 Oct 2011 04:19:20 GMT 
Server: AmazonS3 
ETag: "4846afffbc1a7284fff4a590d5acd6cd" 
Content-Type: image/jpeg 
Accept-Ranges: bytes 

答えて

7

私はAmazon S3 PHP Classが、documentationで簡単に見にputObjectFile方法が償却され、あなたが代わりにputObjectを使用する必要があることを明らかに精通していないです。

<?php 

    // PUT with custom headers: 
    $put = S3::putObject(
     S3::inputFile($file), 
     $bucket, 
     $uri, 
     S3::ACL_PUBLIC_READ, 
     array(), 
     array(// Custom $requestHeaders 
      "Cache-Control" => "max-age=315360000", 
      "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years")) 
     ) 
    ); 
    var_dump($put); 

?> 

しかし、なぜ公式Amazon SDk for PHPを使用することを検討していませんか?

create_objectを使用してファイルをアップロードします。 official docsは、いくつかの良い例があります:

// Instantiate the class 
$s3 = new AmazonS3(); 

$response = $s3->create_object('my-bucket', 'üpløåd/î\'vé nøw béén üpløådéd.txt', array(
    'fileUpload' => 'upload_me.txt', 
    'acl' => AmazonS3::ACL_PUBLIC, 
    'contentType' => 'text/plain', 
    'storage' => AmazonS3::STORAGE_REDUCED, 
    'headers' => array(// raw headers 
     'Cache-Control' => 'max-age', 
     'Content-Encoding' => 'gzip', 
     'Content-Language' => 'en-US', 
     'Expires' => 'Thu, 01 Dec 1994 16:00:00 GMT', 
    ), 
    'meta' => array(
     'word' => 'to your mother', // x-amz-meta-word 
     'ice-ice-baby' => 'too cold, too cold' // x-amz-meta-ice-ice-baby 
    ), 
)); 

// Success? 
var_dump($response->isOK()); 
+0

に注目してください!どうもありがとうございました。私は何か減価償却されたものを使っていたことに気づいていませんでした。 – Lamoni

1

Cache-ControlまたはExpiresヘッダデータのキャッシュにクライアントに指示するために、サーバからクライアントに送信されます。あなたのケースでは、クライアントは意味を持たないサーバーにこれらのヘッダーを送信します。私はあなたがS3にヘッダを送ることを意図していると信じています、そして、別のクライアントがファイルを要求したときにそれらがS3によって提供されると思います。これはサポートされていません。

しかし、S3は、ファイルを再ダウンロードするには、あなたのクライアントのためにいかなる理由がほとんどないとして、それはS3(この場合はETagLast-Modifiedが変更されます)に更新されていますしない限り、ほとんどの実用的な目的のために十分なものでなければならないETAgLast-Modifiedヘッダを提供します。

+1

うまく動作しますので、

S3::putObjectFileはとにかくS3::putObject単なるラッパーです、私は彼らがヘッダーとしてサーバーに行くのではなく、メタデータとして行くことを知っています。 – Lamoni

+1

また、ETagとLast-Modifiedのアイデアをお寄せいただき、ありがとうございます。 – Lamoni

1

S3::putObjectFileは、リクエストヘッダを受け付けません。あなたが見ている議論は全く同じではないMeta Headersです。以下は、Amazonは、クライアントがその特定の画像を要求するときにクライアントに送信するためにどのようなヘッダを知っているので、それらのヘッダが送信され

$s3->putObject( S3::inputFile($image_location), "bucketname", $image_file_name, S3::ACL_PUBLIC_READ, array(), // meta headers array( // request headers "Cache-Control" => "max-age=315360000", ) );

関連する問題