2014-12-12 2 views
2

Вот мой кодКак добавить Http Hearders для AWS S3 изображений

function s3UploadImage($tmpFile,$file) { 
    $tmpLoc=$bucket.$file; 
    $s3 = new S3(awsAccessKey, awsSecretKey); 
    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ); 
    if($s3->putObjectFile($tmpFile, $bucket , $tmpLoc, S3::ACL_PUBLIC_READ, array(
       "Cache-Control" => "max-age=94608000", 
       "Expires" => gmdate("D, d M Y H:i:s T", 
           strtotime("+3 years")),$contentType)) 
    { 
     $msg = "S3 Upload Successful."; 
    // $s3file='https://xxxxxxxxxxxxx.xxxxxxx/'.$tmpLoc; 
    $s3file='https://xxxxxxxxxxxxxxx.xxxxxxx/'.$tmpLoc; 
//    echo "<img src='$s3file'/>"; 
       echo 'S3 File URL:'.$s3file; 
     $status=true; 
    } 
    else{ 
     $msg = "S3 Upload Fail."; 
     $status=false; 
    } 
    return $status; 
} 

В этом коде я добавил массив ("Cache-Control" => "Макс-возраст = 31536000", "Expires" => gmdate ("D, D MYH: я: S T", StrToTime ("+ 3 года")) его работает нормально только Но его добавления, как этот

x-amz-meta-cache-control public,max-age=31536000 
    x-amz-meta-expires Wed, 11 Dec 2017 10:47:59 GMT 

В Google тест скорости страницы инструмента еще показывая истекает. не указывается , но если я добавлю непосредственно http Header в s3, используя некоторые инструменты, такие как браузер s3, его рабочий тон. Он добавляет вот так:

Expires Wed, 15 May 2019 20:00:00 
Cache-Control max-age=31536000, public 

используя api, как добавить, как это http заголовки.

ответ

0

Здесь заголовки, которые вы добавили, похожи на пользовательские метаданные. При создании пользовательских метаданных ваш SDK будет добавлять x-amz-meta- вместе с вашим ключом метаданных, чтобы идентифицировать его. Вы должны установить этот заголовок, как,

$result = $s3->putObject(array(
    'Bucket'  => $bucket, 
    'Key'   => $keyname, 
    'SourceFile' => $filepath, 
    'ContentType' => 'text/plain', 
    'Expires'  => 'Wed, 15 May 2019 20:00:00', 
    'CacheControl' => 'max-age=31536000, public', 
    'ACL'   => 'public-read', 
    'StorageClass' => 'REDUCED_REDUNDANCY', 
    'Metadata'  => array( 
     'param1' => 'value 1', 
     'param2' => 'value 2' 
    ) 
)); 
0

У меня такая же проблема. Я решил, что проблема, как это проверить мой код ниже

$metaHeaders = array(); 
$requestHeaders['Cache-Control'] = 'public, max-age=31536000'; 
$requestHeaders['Expires'] = gmdate("D, d M Y H:i:s T", strtotime("+1 years")); 


if($s3->putObject($tmpFile, $bucket , $tmpLoc, S3::ACL_PUBLIC_READ, $metaHeaders, $requestHeaders) 

использование putObject метод вместо putObjectFile метода и установить $requestHeaders это работает