java - 使用 AWS Java SDK 为现有 S3 对象设置过期 header

标签 java amazon-s3 http-headers amazon-web-services

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

我们正在使用 AWS Java SDK ,它允许在不重新上传对象内容的情况下更改对象的元数据。我们使用 CopyObjectRequest 来做到这一点将对象复制到自身。 ObjectMetadata类允许我们设置 Cache-ControlContent-Type 和其他几个 header 。但不是 Expires header 。

我知道 S3 使用 REST API 为 PUT 对象存储和提供 Expires header 。有没有办法从 Java SDK 执行此操作?

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

最佳答案

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

By default, all object metadata for the source object are copied to the new destination object, unless new object metadata in the specified CopyObjectRequest is provided.

这可以大致实现(我脑子里的片段,所以要小心):

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()约束:

The Amazon S3 Acccess Control List (ACL) is not copied to the new object. The new object will have the default Amazon S3 ACL, CannedAccessControlList.Private, unless one is explicitly provided in the specified CopyObjectRequest.

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

祝你好运!

关于java - 使用 AWS Java SDK 为现有 S3 对象设置过期 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797276/

相关文章:

php - 如何防止php站点的浏览器缓存

http - 如何产生501错误?

java - Blackberry 上的 XML 解析问题

java - Rx 将 Observable<List<T>> 转换为 Observable<T>

Java - 获取当前的类名?

java - 如何使用 DOM JAVA 获取 XML 元素的第二个同级值?

ruby-on-rails - 给定字符集时,Rails 无法解析 Accept header

javascript - 上传到 Filestack 的文件在 S3 上不可见

amazon-s3 - S3 无尾部斜杠删除查询参数

amazon-web-services - E2507 IAM 策略 key 版本不存在