从PHP AWS SDK为S3对象设置缓存控制HTTP头
我正在使用AmazonSDKforPHP并尝试在图像上设置缓存控制头。当我尝试通过MetaData=array(“Cache-Control”)添加它时,当我登录到S3存储桶时,它将其更改为x-amz-meta-Cache-Control,当我下载文件时,没有缓存控制集。但是,如果我手动更改此设置,则缓存控件可以完美地工作。我是否缺少一些参数,可以用来在上传时以编程方式设置HTTP请求头?我用的是PutObject方法。我相信AWS SDK是从2013年开始的。缓存控制不是通过“元数据”索引设置的,“缓存控制”与“元数据”处于同一级别,不包含在其中 您可以使用这样的内容作为putObject()方法的配置数组从PHP AWS SDK为S3对象设置缓存控制HTTP头,php,amazon-web-services,amazon-s3,Php,Amazon Web Services,Amazon S3,我正在使用AmazonSDKforPHP并尝试在图像上设置缓存控制头。当我尝试通过MetaData=array(“Cache-Control”)添加它时,当我登录到S3存储桶时,它将其更改为x-amz-meta-Cache-Control,当我下载文件时,没有缓存控制集。但是,如果我手动更改此设置,则缓存控件可以完美地工作。我是否缺少一些参数,可以用来在上传时以编程方式设置HTTP请求头?我用的是PutObject方法。我相信AWS SDK是从2013年开始的。缓存控制不是通过“元数据”索引设置
$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'
))));
对于upload()方法
$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'
))));
另外,值得指出的是,
upload()
将对大小为5MB的文件包装putObject()
,否则它将启动一个多部分上传请求。如果要将CacheControl
头添加到bucket中已经存在的项,请使用SDK的copyObject
方法。设置要替换的MetadataDirective
参数,使项目覆盖自身
我注意到一件奇怪的事情:我还必须设置ContentType
标题,尽管它已经设置好了。否则,图像将不会在浏览器中内联显示,而是作为下载提供
$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'
));
如果我的回答对您有帮助,请将其标记为“已接受”。您能帮助我更新laravel PHP中现有对象的元数据吗?我已尝试过您的解决方案,但无法更新现有文件的元数据。谢谢