问题描述
我正在开发与亚马逊 s3 服务相关的 java 项目,其中我使用 jets3 库进行 s3 操作,例如创建存储桶等,现在我正在用 aws-sdk-java-v2 替换 jets3,但问题 ie 在 jets3 中以下更新上传对象元数据的方法是:-
s3ervice.updateObjectMetadata(sBucket,sObject);
但是在新的 aws-sdk 中我没有找到任何方法。我正在使用以下代码块来更新元数据,但每次替换内容时,我只想更新元数据而不替换内容,所以请提出建议。
代码:-
public static boolean updateObjectMetadataBycopyObject(S3Client s3Client,String bucketName,String objectKey
) {
Map ds = new HashMap<>();
ds.put("ds","dsa");
String encodedUrl = null;
try {
encodedUrl = URLEncoder.encode(bucketName + "/" + objectKey,StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
System.out.println("URL Could not be encoded: " + e.getMessage());
}
copyObjectRequest copyReq = copyObjectRequest.builder()
.destinationBucket(bucketName).copySource(encodedUrl)
.destinationKey(objectKey).Metadata(ds).storageClass(StorageClass.REDUCED_REDUNDANCY)
.build();
try {
copyObjectResponse copyRes = s3Client.copyObject(copyReq);
copyRes.copyObjectResult().toString();
return true;
} catch (S3Exception e) {
throw e;
}
}## heading ##
请建议如何使用 aws-sdk-v2 更新上传对象的元数据。
解决方法
没有复制的元数据
不幸的是,如果不进行复制对象,则无法更新元数据。这是亚马逊的摘录
上传对象后,您将无法修改对象元数据。修改对象元数据的唯一方法是制作对象的副本并设置元数据。修改对象元数据的唯一方法是制作对象的副本并设置元数据。
此外,即使是通过管理控制台公开的用于更改元数据的功能也会复制对象。
此操作会使用更新的设置和上次修改日期创建对象的副本。