2017-06-11 103 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)); 
相關問題