【问题标题】:How to Add Http Hearders for AWS S3 images如何为 AWS S3 图像添加 Http 标头
【发布时间】:2015-02-11 01:08:19
【问题描述】:

这是我的代码

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;
}

在这段代码中,我添加了 array("Cache-Control" => "max-age=31536000","Expires" => gmdate("D, d MYH:i:s T", strtotime("+3 years ")) 它的工作正常。但它像这样添加

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

在谷歌页面速度测试工具中仍然显示未指定过期 但是如果我使用 s3 browser 等工具直接在 s3 中添加 http Header 。它工作正常。它像这样添加

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

使用api如何添加这样的http headers。

【问题讨论】:

    标签: php http amazon-web-services amazon-s3 http-headers


    【解决方案1】:

    您在此处添加的标题类似于自定义元数据。在创建自定义元数据时,您的 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'
         )
    ));
    

    【讨论】:

    • 这是有效的,已于 2019 年 7 月 25 日确认。
    【解决方案2】:

    我也有同样的问题。我解决了这个问题,检查我下面的代码

    $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 这行得通

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-02-10
      • 2012-10-11
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多