aws php环境变量,关于亚马逊网络服务:从PHP AWS SDK设置S3对象的缓存控制HTTP标头...

我使用适用于PHP的Amazon SDK并尝试在映像上设置Cache-Control Header。 当我尝试通过MetaData = array(" Cache-Control")添加它时,当我登录到S3存储桶时,将其更改为x-amz-meta-cache-control,并且在下载文件时,没有缓存 控制集。 但是,如果我手动更改此设置,则Cache-control可以完美运行。 我缺少一些参数,可以用来在上传时以编程方式设置HTTP请求标头吗? 我正在使用PutObject方法。 我相信AWS开发工具包来自2013年。

如果对您有帮助,可以将我的回答标记为"已接受"。

缓存控件未通过" MetaData"索引设置," CacheControl"与" MetaData"处于同一级别,未包含在其中。

http://docs.aws.amazon.com/aws-sdk-php-2/latest/class-Aws.S3.S3Client.html#_putObject

您将使用类似这样的东西作为putObject()方法的配置数组...

$s3client->putObject(array(

'Bucket' => '...',

'key' => '...',

'body' => '...',

'CacheControl' => 'max-age=172800',

'MetaData' => array(

'metaKey' => 'metaValue',

'metaKey' => 'metaValue'

)));

对于upload()方法...

$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标头添加到存储桶中已存在的项目中,请使用SDK的copyObject方法。 将MetadataDirective参数设置为REPLACE,以使该项目覆盖自身。

我注意到了一件奇怪的事情:即使已经设置了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'

));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值