【发布时间】:2016-05-27 06:25:53
【问题描述】:
我正在尝试向 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());
【问题讨论】:
-
您似乎只在本地更改元数据,那为什么会令人惊讶呢?
-
所以我是否必须再次执行 putObject 才能使这个新的元数据发生?我认为 addUserMetadata 应该自动添加新数据,而不必为了添加一些用户元数据而再次放置整个对象。请澄清我是否弄错了。
-
那么有
s3.setObjectMetadata吗? -
是的,但它会将整个元数据重置为我添加的新字段。然后我丢失了对象上已经存在的所有现有元数据项。
-
所以用整个更新的元数据调用它,或者看看是否有一个更新而不是替换的方法。你是希望我进来帮你打字还是什么? 努力。