繁体   English   中英

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

[英]How to set the content type of an S3 object via the SDK?

我正在尝试使用 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);
   }

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

截屏

如您所见,前缀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");

修复了这个。

在 SDK V2 中,使用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM