使用AWS Java SDK为现有S3对象设置Expires标头

bkirkbri:

我正在更新Amazon S3存储桶中的现有对象以设置一些元数据。我想Expires为每个对象设置HTTP 标头,以更好地处理HTTP / 1.0客户端。

我们正在使用AWS Java SDK,该工具允许在不重新上传对象内容的情况下更改对象的元数据。我们使用CopyObjectRequest将对象复制到其自身。ObjectMetadata类允许我们设置的Cache-ControlContent-Type和其他几个头。但是没有Expires标题。

我知道S3 Expires使用REST API 存储并为对象PUT 提供标头。有没有办法从Java SDK中做到这一点?

更新以表明我们正在使用 CopyObjectRequest

斯特芬·欧宝:

要更改现有Amazon S3对象元数据,您需要将对象复制到自身并动态提供所需的新元数据,请参阅copyObject()

默认情况下,除非在指定的CopyObjectRequest中提供了新的对象元数据,否则源对象的所有对象元数据都将复制到新的目标对象。

大约可以做到这一点(从我头顶的碎片,所以要当心):

AmazonS3 s3 = new AmazonS3Client();

String bucketName = "bucketName ";
String key = "key.txt";
ObjectMetadata newObjectMetadata = new ObjectMetadata();
// ... whatever you desire, e.g.:
newObjectMetadata.setHeader("Expires", "Thu, 21 Mar 2042 08:16:32 GMT");

CopyObjectRequest copyObjectRequest = new CopyObjectRequest()
                 .WithSourceBucketName(bucketName)
                 .WithSourceKey(key)
                 .WithDestinationBucket(bucketName)
                 .WithDestinationKey(key)
                 .withNewObjectMetadata(newObjectMetadata);

s3.copyObject(copyObjectRequest);

请注意以下容易错过但很重要的copyObject()约束:

Amazon S3访问控制列表(ACL)不会复制到新对象。除非在指定的CopyObjectRequest中显式提供一个对象,否则新对象将具有默认的Amazon S3 ACL CannedAccessControlList.Private。

这还没有在我的代码片段中说明!

祝好运!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章