我正在更新 Amazon S3 存储桶中的现有对象以设置一些元数据。我想设置 HTTPExpires
每个对象的标头以更好地处理 HTTP/1.0 客户端。
我们正在使用AWS Java SDK http://aws.amazon.com/sdkforjava/,它允许对对象进行元数据更改,而无需重新上传对象内容。我们这样做使用复制对象请求 http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/CopyObjectRequest.html将对象复制到自身。这对象元数据 http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/ObjectMetadata.html类允许我们设置Cache-Control
, Content-Type
和其他几个标题。但不是Expires
header.
我知道 S3 存储并提供服务Expires
使用 REST API PUT 的对象标头。有没有办法通过 Java SDK 来做到这一点?
更新以表明我们正在使用 CopyObjectRequest
要改变metadata http://docs.amazonwebservices.com/AmazonS3/latest/dev/UsingMetadata.html现有的亚马逊S3 http://aws.amazon.com/s3/对象,您需要将对象复制到自身并动态提供所需的新元数据,请参阅复制对象() http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#copyObject%28com.amazonaws.services.s3.model.CopyObjectRequest%29:
默认情况下,源对象的所有对象元数据都会复制到
新的目标对象,除非新的对象元数据
提供了指定的 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);
请注意以下容易错过但很重要的内容复制对象() http://docs.amazonwebservices.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#copyObject%28com.amazonaws.services.s3.model.CopyObjectRequest%29约束:
Amazon S3 访问控制列表 (ACL) 是not复制到新的
目的。新对象将具有默认的 Amazon S3 ACL,
CannedAccessControlList.Private,除非明确提供
指定的 CopyObjectRequest。
This is not占到我的代码片段了吗!
祝你好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)