2017-06-11 105 views
0

我正在上传S3 aws上的文件时设置用户定义的元数据。 但它不工作.. 这里是我的代码的一部分:使用java SDK在S3 AWS上上传文件时无法设置元数据

 AmazonS3 s3 = new AmazonS3Client(credentials); 
     Map<String, String> metaList = new HashMap<>(); 
     metaList.put("x-amz-meta-example", "true"); 

     ObjectMetadata medata = new ObjectMetadata(); 
     medata.setUserMetadata(metaList); 

     String bucketName = "bucketName"; 
     String key = "objKey"; 
     File file = new File("example.txt"); 


     try{ 

      s3.putObject(bucketName, key, file) 
      .setMetadata(medata); 
      System.out.println("Successfully uplooaded..."); 


     }catch(Exception e){ 


      System.out.println(e.getMessage()); 
     } 

在AWS控制台,文件上传成功。但是当我检查元数据时,我并没有选择我设定的元数据。

回答

0

在SDK它说未设置“X-AMZ-元嗒嗒”

亚马逊S3可以通过内部表示它作为HTTP报头中包含“X amz-前缀上的对象存储的附加元数据荟萃”。使用用户元数据将任意元数据与其数据一起存储在Amazon S3中。设置用户元数据时,调用者不应该包含内部“x-amz-meta-”前缀;这个库将为他们处理。同样,当调用者检索自定义用户元数据时,他们将看不到“x-amz-meta-”标题前缀。

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/ObjectMetadata.html#setUserMetadata-java.util.Map-

+0

即使去掉前缀 “X-AMZ-元”,它不工作...是否有后有人认为我做错了? – Matrix11

-1
s3.putObject(bucketName, key, file).setMetadata(medata); 

在上述方法的调用,要设置的元数据的结果,但不是用于请求。

这将工作:

s3.putObject(bucketName, key, new FileInputStream(file),medata) 
0

这适用于AWS SDK 1.11.x

ObjectMetadata metadata = new ObjectMetadata(); 
metadata.setCacheControl("max-age=2592000, must-revalidate"); 

PutObjectResult s3putObj = s3client.putObject(new PutObjectRequest(s3bucket, 
        filePath, 
        filetoupload) 
        .withMetadata(metadata)//set metadata 
        .withCannedAcl(CannedAccessControlList.PublicRead)); 
相关问题