如何为 AWS S3 图像添加 Http 标头
Posted
技术标签:
【中文标题】如何为 AWS S3 图像添加 Http 标头【英文标题】:How to Add Http Hearders for AWS S3 images 【发布时间】: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。
【问题讨论】:
【参考方案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
这行得通
【讨论】:
以上是关于如何为 AWS S3 图像添加 Http 标头的主要内容,如果未能解决你的问题,请参考以下文章
AWS Elastic Beanstalk / S3 / CloudFront Cache-Control 标头
如何为 AWS 放大 GraphQL API 添加服务器端业务逻辑?
如何为 ECS 添加带有应用程序负载均衡器的 AWS API 网关?
请求的资源(AWS、API Gateway、S3、CORS)上不存在“Access-Control-Allow-Origin”标头