使用 java 开发工具包在 S3 AWS 上上传文件时无法设置元数据



我在 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 控制台中,文件上传成功。但是当我检查元数据时,我没有看到我设置的元数据。

在SDK中,它说不要设置"x-amz-meta-BLAH">

Amazon S3 可以在对象上存储其他元数据,方法是在内部将其表示为前缀为"x-amz-meta-"的 HTTP 标头。使用用户元数据在 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-

适用于 aws 开发工具包 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));
    ObjectMetadata metadatas = new ObjectMetadata();
    metadatas.addUserMetadata("example", "true");
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
    putObjectRequest.setMetadata(metadatas);
    s3.putObject(putObjectRequest);
                
s3.putObject(bucketName, key, file).setMetadata(medata);

在上述方法调用中,您将元数据设置为结果,而不是为请求设置元数据。

这将起作用:

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

最新更新