我们在DSpace XMLUI工作流程中实施了一个新步骤。此步骤更改上载文件的文件名。 我们已经尝试了两种不同的方法:
我们的方法如下:
private void updateFileName(DBConnection dspaceDbConnection, Context c, Item item, String fName)
throws Exception {
Bundle[] bundles = item.getBundles("ORIGINAL");
for (int i = 0; i < bundles.length; i++) {
Bitstream[] bitstreams = bundles[i].getBitstreams();
for (int j = 0; j < bitstreams.length; j++) {
bitstreams[j].setName(fileName);
bitstreams[j].update();
log.info("file name change:" + fileName);
}
}
c.commit();
提前感谢您的建议!
答案 0 :(得分:1)
您可以使用方法context.turnOffAuthorisationSystem()来临时阻止授权异常的发生。确保在使用方法context.restoreAuthSystemState()调用context.commit()后恢复授权!
例如:
private void updateFileName(DBConnection dspaceDbConnection, Context c, Item item, String fName)
throws Exception {
try{
c.turnOffAuthorisationSystem()
Bundle[] bundles = item.getBundles("ORIGINAL");
for (int i = 0; i < bundles.length; i++) {
Bitstream[] bitstreams = bundles[i].getBitstreams();
for (int j = 0; j < bitstreams.length; j++) {
bitstreams[j].setName(fileName);
bitstreams[j].update();
log.info("file name change:" + fileName);
}
}
c.commit();
}
finally {
c.restoreAuthSystemState()
}
答案 1 :(得分:1)
查看DSpace 5x代码,我在创建项目时会在Item.create()中调用以下内容。
// Call update to give the item a last modified date. OK this isn't
// amazingly efficient but creates don't happen that often.
context.turnOffAuthorisationSystem();
i.update();
context.restoreAuthSystemState();
context.addEvent(new Event(Event.CREATE, Constants.ITEM, i.getID(),
null, i.getIdentifiers(context)));
对于比特流,存在以下方法Bitstream.updateLastModified()。
public void updateLastModified()
{
//Also fire a modified event since the bitstream HAS been modified
ourContext.addEvent(new Event(Event.MODIFY, Constants.BITSTREAM, getID(), null, getIdentifiers(ourContext)));
}
您是否尝试获取索引以发现已分配给比特流的文件名?我不相信文件名是全文(SOLR)索引。