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

时间:2014-05-05 07:26:08

标签: java amazon-web-services amazon-s3

我正在尝试使用AWS Api设置多个对象的内容类型,并为其添加“content-encoding: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-meta已添加到我的自定义标头中,并且它们的设置较低。并且忽略了content-type标头,而是将www/form-encoded作为标头。

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

2 个答案:

答案 0 :(得分:13)

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

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

到:

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

解决了这个问题。

答案 1 :(得分:1)

在 SDK V2 中,使用:

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