如何通过SDK设置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); } 

但是当我运行它时,结果如下:

截图

正如您所看到的,前缀x-amz-meta已添加到我的自定义标头中,并且它们的内容较低。 content-type标题被忽略,而是将www/form-encoded作为标题。

我能做些什么来使它接受我的标题值?

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

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

至:

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

修好了。