我在 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)