如何通过SDK设置S3对象的内容类型?

2022-09-04 19:35:02

我正在尝试使用 AWS Api 设置多个对象的内容类型,并向它们添加“内容编码:gzip”标头。以下是我执行此操作的代码:

for (S3ObjectSummary summary : objs.getObjectSummaries() )
   {
       String key = summary.getKey();
       if (! key.endsWith(".gz"))
           continue;

       ObjectMetadata metadata = new ObjectMetadata();
       metadata.addUserMetadata("Content-Encoding", "gzip");
       metadata.addUserMetadata("Content-Type", "application/x-gzip");
       final CopyObjectRequest request = new CopyObjectRequest(bucket, key, bucket, key)
               .withSourceBucketName( bucket )
               .withSourceKey(key)
               .withNewObjectMetadata(metadata);

       s3.copyObject(request);
   }

但是,当我运行此程序时,结果是:

screenshot

如您所见,前缀已添加到我的自定义标头中,并且它们是小写的。标头被忽略,而是将其作为标头放置。x-amz-metacontent-typewww/form-encoded

我该怎么做才能让它接受我的标头值?


答案 1

发现问题。 要求显式设置内容类型/编码,而不是通过 。更改以下内容:ObjectMetadataaddUserMetadata()

   metadata.addUserMetadata("Content-Encoding", "gzip");
   metadata.addUserMetadata("Content-Type", "application/x-gzip");

自:

       metadata.setContentEncoding("gzip");
       metadata.setContentType("application/x-gzip");

修复了此问题。


答案 2

在 SDK V2 中,使用:

PutObjectRequest.builder() 
...
.contentType(contentType)
.build()

推荐