netbeans 使用java SDK在S3 AWS上上载文件时无法设置元数据

bvk5enib  于 2022-11-10  发布在  Java
关注(0)|答案(4)|浏览(188)

我试图设置用户定义的元数据,同时上传一个文件上的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控制台中,文件上传成功。但是当我检查元数据时,我没有看到我设置的元数据。

voase2hg

voase2hg1#

在SDK中,不设置“x-amz-meta-BLAH”
Amazon S3可以通过在内部将元数据表示为前缀为“x-amz-meta-"的HTTP头来存储对象上的附加元数据。使用user-metadata可以在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-

xpcnnkqh

xpcnnkqh2#

这适用于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));
qaxu7uf2

qaxu7uf23#

ObjectMetadata metadatas = new ObjectMetadata();
    metadatas.addUserMetadata("example", "true");
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
    putObjectRequest.setMetadata(metadatas);
    s3.putObject(putObjectRequest);
8dtrkrch

8dtrkrch4#

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

在上面的方法调用中,您将元数据设置为结果,而不是请求。
这将起作用:

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

相关问题