2013-10-16 16 views
9

PHP için Amazon SDK'yı kullanıyorum ve önbellek denetimi üstbilgisini görüntüde ayarlamaya çalışıyorum. MetaData = array ("Cache-Control") ile eklemeyi denediğimde, S3 kovasına giriş yaptığımda x-amz-meta-cache-control olarak değiştirir ve dosyayı indirdiğimde önbellek yoktur. -kontrol seti. Ancak bu ayarı elle değiştirirsem, Önbellek denetimi mükemmel çalışır. HTTP İstek Başlıkları'nı programa yükleme sırasında ayarlamak için kullanabileceğim bazı eksik parametreler var mı? PutObject yöntemini kullanıyorum. AWS SDK'nın 2013'ten geldiğine inanıyorum.S3 için Önbellek Denetimi HTTP Üstbilgisini Ayarla PHP'den AWS SDK için

+0

Size yardımcı olursa cevabımı "kabul edildi" olarak işaretler misiniz? – Scuzzy

cevap

16

Önbellek denetimi "MetaData" dizini üzerinden ayarlanmadı, "CacheControl", içinde yer almayan "MetaData" ile aynı seviyede. Sen putObject() yöntemi için yapılandırma dizi olarak böyle bir şey kullanmak istiyorum

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

... yükleme() yöntemi için

$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' 
)))); 

Ayrıca, upload()'unsarılacağını belirtmek gerekir. Boyutu 5MB olan dosyalar için, aksi takdirde çok parçalı bir yükleme isteği başlatacaktır.

8

CacheControl üstbilgisini grubunuzda bulunan bir öğeye eklemek isterseniz, SDK'nın copyObject yöntemini kullanın. Öğenin üzerine yazılması için REPLACE değerine MetadataDirective parametresini ayarlayın.

Bir garip şey farkettim: Zaten ayarlanmış olsa bile ContentType başlığını ayarlamak zorunda kaldım. Aksi takdirde, resim tarayıcıda satır içi gösterilmeyecek, ancak indirme olarak sunulacaktır.

$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' 
)); 
İlgili konular