当前位置:  开发笔记 > 编程语言 > 正文

是否可以在不下载整个对象的情况下更改S3对象上的标题?

如何解决《是否可以在不下载整个对象的情况下更改S3对象上的标题?》经验,为你挑选了3个好方法。

我已经将一堆图像上传到Amazon S3,现在想要为它们添加一个Cache-Control标头.

可以在不下载整个图像的情况下更新标题吗?如果是这样,怎么样?



1> stevemegson..:

它是测试版功能,但您可以在复制对象时指定新的元数据.为副本指定相同的源和目标,这样只会更新对象上的元数据.

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


不要忘记在headers参数中包含对象的Content-type,因为PUT请求会重写所有原始标题.

2> bkaid..:

这是测试版,可以通过执行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);



3> luissquall..:

这就是使用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;
}
?>

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有