我已经将一堆图像上传到Amazon S3,现在想要为它们添加一个Cache-Control标头.
可以在不下载整个图像的情况下更新标题吗?如果是这样,怎么样?
它是测试版功能,但您可以在复制对象时指定新的元数据.为副本指定相同的源和目标,这样只会更新对象上的元数据.
PUT /myObject HTTP/1.1 Host: mybucket.s3.amazonaws.com x-amz-copy-source: /mybucket/myObject x-amz-metadata-directive: REPLACE x-amz-meta-myKey: newValue
这是测试版,可以通过执行put命令并复制对象来实现,如此处所述.它也可以在他们的SDK中使用.例如使用C#:
var s3Client = new AmazonS3Client("publicKey", "privateKey"); var copyRequest = new CopyObjectRequest() .WithDirective(S3MetadataDirective.REPLACE) .WithSourceBucket("bucketName") .WithSourceKey("fileName") .WithDestinationBucket("bucketName") .WithDestinationKey("fileName) .WithMetaData(new NameValueCollection { { "x-amz-meta-yourKey", "your-value }, { "x-amz-your-otherKey", "your-value" } }); var copyResponse = s3Client.CopyObject(copyRequest);
这就是使用AWS SDK for PHP 2的方法:
get('s3'); // Settings $bucketName = 'example.com'; $objectKey = 'image.jpg'; $maxAge = MONTH; $contentType = 'image/jpeg'; try { $o = $s3->copyObject(array( 'Bucket' => $bucketName, 'Key' => $objectKey, 'CopySource' => $bucketName . '/'. $objectKey, 'MetadataDirective' => 'REPLACE', 'ACL' => CannedAcl::PUBLIC_READ, 'command.headers' => array( 'Cache-Control' => 'public,max-age=' . $maxAge, 'Content-Type' => $contentType ) )); // print_r($o->ETag); } catch (Exception $e) { echo $objectKey . ': ' . $e->getMessage() . PHP_EOL; } ?>