过去两年我一直在使用Liferay,但我从未需要任何广泛的文档管理。
现在我有一个用户上传文档的portlet(MS office OLE2文档,ODS文档,PDF等),我必须使用所有可用的元数据来保存它们。
我知道如何在不使用Liferay的情况下这样做,我可能会使用Apache解决方案与Apache Tika(UpdateRichDocuments和ExtractingRequestHandler)或Apache Jackrabbit一起使用Apache Tika(org) .apache.jackrabbit.extractor。*)。
问题是,如果我查看Liferay的主干,有一些关键类:
直接在Hooks (JCRHook, FileSystemHook, CMISHook, s3Hook)
范围内使用的 DLLocalServiceImpl
另一个替代方法是使用DLAppLocalServiceImpl
使用DLRepositoryLocalServiceImpl
并且文件也通过Hooks保存到存储库中,但是在那里完成了很多其他的工作。
Liferay中没有jackrabbit-text-extractors库,所以我想如果我想从PDF,DOC,ODS文档中提取元数据,我会很难...因为DL服务层不接受其他属性
可以请任何人合作这个吗?谢谢
答案 0 :(得分:2)
SOLR用于索引,Jackrabbit用于文档存储。在代码中管理Liferay文档库非常简单,只需查看DL * LocalServiceUtil类,即DLFolderLocalServiceUtil
和DLFileLocalServiceUtil
。默认情况下,Liferay只是在硬盘驱动器上创建一个匹配的文件夹/文件结构(名称已更改),因此您只需要编写代码或使用Jackrabbit,因为Liferay允许启动/下载和查看开箱即用通过控制面板和各种portlet。
我没有将JackRabbit与Liferay一起使用,但一旦配置完毕,一切都应该在封面下进行管理,你不必担心它在前端。
当你说“所有元数据都可用时”我不确定保留什么,但除了重命名文件以便跟踪它之外,不应该有任何其他更改。通过上传每种类型的文件并检查LIFERAY/data/document_library
目录和子目录中的条目,可以快速轻松地进行测试。如果使用Jackrabbit,这将是不同的。
答案 1 :(得分:1)
我认为这两项服务DLLocalServiceImpl
和DLAppLocalServiceImpl
都很重要。前一个如果直接访问存储库。请注意,通过此服务添加文件时,您需要将相应的DlFileEntry保存到数据库中,然后引用addFile(....,fileEntryId,...)。
后一项服务正在为您做更多的事情,主要是资产管理和工作流程。
关于您的用例,我会避免使用文档库,因为没有元数据可以进入JCR存储库。实际上,只有您可以存储的元数据/自定义属性才是Liferay门户网站的custom properties
AKA Expando
功能。
最好的办法似乎是实现自己的jackrabbit钩子将数据存储到存储库中,让Liferay文档库使用该存储库。
答案 2 :(得分:0)
认为埃德加是对的。如果您通过http://svn.liferay.com/repos/public/portal/trunk/portal-service/src/com/liferay/documentlibrary/service/DLLocalService.java(以访客身份登录而无密码)检查当前中继,您将不再找到DLFolderLocalServiceUtil类。我们也在使用现有的DLFolderLocalServiceUtil类。谢谢你的提醒。我们将重构我们的代码,所以当6.1出现时我们仍然可以使用DocumentLibrary服务。
答案 3 :(得分:0)
您需要始终使用DLAppServiceUtil(特别是Liferay指示)。这是我将文件保存到CMS的工作代码:
public static void saveFileToCMS(ActionRequest aReq, long groupId, String fileName, File filenameWithPath) {
try {
ServiceContext serviceContext = ServiceContextFactory.getInstance(
Group.class.getName(), aReq);
// prevents duplicate entries based on unique title name
Random rand = new Random();
Integer suffix = new Integer(rand.nextInt(10000));
DLAppServiceUtil.addFileEntry(groupId, 0, fileName, "application/vnd.ms-excel",
fileName + suffix.toString(), "description goes here", "changelogname",
filenameWithPath, serviceContext);
//log.info("Successfully added the new file");
} catch (PortalException pe) {
log.error("Portal Exception occurred while saving file to CMS");
pe.printStackTrace();
} catch (SystemException e) {
log.error("System Exception occurred while saving file to CMS");
e.printStackTrace();
}
}