我正在使用Amazon S3 PHP类上传图像,但缓存头没有设置。这是我正在用的电话
$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"))
)
);
我得到的头部响应为上传的图像是:
<>之前日期:星期二,2011年10月4日04:21:09 GMTx-amz-request-id: B6BAAAAD9B460160内容长度:34319x-amz-id-2: Oxxx1hIG2nNKfff3vgH/xx/dffF59O/7 a1uwrkrgzlju2g/8 wvtcbpccytoulbm最后修改日期:2011年10月4日星期二04:19:20 GMT服务器:AmazonS3ETag:"4846 afffbc1a7284fff4a590d5acd6cd"内容类型:图像/jpegAccept-Ranges:字节我不熟悉Amazon S3 PHP类,但快速浏览文档显示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官方的PHP SDk呢?
您将使用create_object
上传文件。官方文档中有一些很好的例子:
// 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());
Cache-Control
或Expires
报头从服务器发送到客户端,指示客户端缓存数据。在你的情况下,你有客户端发送这些头到服务器,这没有意义。我相信您的意图是将标头发送到S3,然后当另一个客户端请求该文件时,您希望S3提供它们。这是不支持的,我相信。
然而,S3提供的ETAg
和Last-Modified
头应该足以满足大多数实际目的,因为您的客户端几乎没有理由重新下载文件,除非它在S3中更新(在这种情况下,ETag
和Last-Modified
将更改)。
S3::putObjectFile
不接受Request Headers。您正在查看的参数是Meta Headers,这不是完全相同的事情。
S3::putObjectFile
只是S3::putObject
的一个包装,所以下面的代码可以正常工作
$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",
)
);