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

13

我正在尝试使用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个回答

19
找到了问题。需要明确设置内容类型/编码,而不是通过 addUserMetadata() 设置。更改如下:
   metadata.addUserMetadata("Content-Encoding", "gzip");
   metadata.addUserMetadata("Content-Type", "application/x-gzip");

to:

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

已解决。


1
它在SDK版本2中不存在。那怎么可能呢? - Ommadawn

2
在SDK V2中,使用以下代码:
PutObjectRequest.builder() 
...
.contentType(contentType)
.build()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接