bki*_*bri 6 java amazon-s3 amazon-web-services http-headers
我正在更新Amazon S3存储桶中的现有对象以设置一些元数据.我想Expires为每个对象设置HTTP 标头以更好地处理HTTP/1.0客户端.
我们正在使用AWS Java SDK,它允许对对象进行元数据更改,而无需重新上传对象内容.我们使用CopyObjectRequest将对象复制到自身.该ObjectMetadata类允许我们设置的Cache-Control,Content-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);
Run Code Online (Sandbox Code Playgroud)
请注意以下容易遗漏,但重要的copyObject()约束:
Amazon S3 Acccess控制列表(ACL)不会复制到新对象.除非在指定的CopyObjectRequest中显式提供了一个,否则新对象将具有默认的Amazon S3 ACL CannedAccessControlList.Private.
我的代码片段中没有考虑到这一点!
祝好运!
| 归档时间: |
|
| 查看次数: |
11434 次 |
| 最近记录: |