我正在尝试使用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
作为标头。
我该怎么做才能让它接受我的标题值?
答案 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()