我正在尝试向S3对象添加新的元数据信息,因此我知道我已处理的所有对象是什么。但由于某种原因,我添加的新数据并不持久。当我退出程序时,它不再存在。我没有在旧数据中看到新字段“已处理”,但我发现它存在于新数据中。我希望新添加的元数据字段永久显示在对象上,但在退出程序后它就消失了
ObjectMetadata objMetaData = new ObjectMetadata();
objMetaData = s3.getObjectMetadata(bucketName,prefix);
Map<String, String> map = new HashMap<String, String>();
Map<String, String> newMap = new HashMap<String, String>();
map = objMetaData.getUserMetadata();
System.out.println("old Meta data is " + map.toString());
objMetaData.addUserMetadata("x-amz-meta-processed", "true");
newMap = objMetaData.getUserMetadata();
System.out.println("New processed data is" +newMap.toString());
答案 0 :(得分:1)
我怀疑你的困惑来自于不理解S3设计的一个重要部分:
修改对象元数据的唯一方法是制作对象的副本并设置元数据。
http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html
您可以在实践中添加&#34;添加&#34;对象的元数据,但真正的含义是你要求S3制作对象的副本,使用相同的源和目标键,但使用&#34;不同&#34;元数据。
如果&#34;不同&#34;您在对象上需要的元数据包括已存在的元数据,您必须在请求中包含该元数据。
S3支持将对象复制到自身,因此您实际上不必重新上传对象。
您现在正在做的只是更改本地代码的数据结构中的值。