【问题标题】:How to set the content type of an S3 object via the SDK?如何通过 SDK 设置 S3 对象的内容类型?
【发布时间】:2014-06-21 10:25:32
【问题描述】:

我正在尝试使用 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 作为标头。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    到:

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

    解决了这个问题。

    【讨论】:

    • SDK版本2上不存在,那怎么可能呢?
    【解决方案2】:

    在 SDK V2 中,使用:

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

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2017-04-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2015-02-16
      • 2014-06-01
      • 2011-09-25
      • 1970-01-01
      相关资源
      最近更新 更多