4

过去两年来我一直在使用Liferay,但我从未需要任何大量的文档管理。Liferay门户中的文档处理

现在我有一个用户上传文档(MS Office OLE2文档,ODS文档,PDF等)的portlet,我必须持续使用所有可用的元数据。

我知道我将如何做到这一点,而无需使用Liferay的,我可能会使用Apache Solr实现与Apache提卡(UpdateRichDocumentsExtractingRequestHandler)或Apache兔崽子被引擎盖下(org.apache.jackrabbit.extractor使用Apache提卡。 *)。

的问题是,如果我看的Liferay的躯干,也有一些关键类:即从内DLLocalServiceImpl采用

Hooks (JCRHook, FileSystemHook, CMISHook, s3Hook)有点儿直接

被采用DLRepositoryLocalServiceImpl另一种替代方法是使用DLAppLocalServiceImpl并且这些文件也通过Hooks被保存到存储库中,但是在那里完成了大量额外的工作。

  1. 有在Liferay中不长耳大野兔,文本提取库,所以我想如果我想的元数据从PDF,文档,ODS文档中提取的,我本来就很艰难的时刻......因为DL服务层不接受额外的属性

    1. 我想我必须避免直接使用贾卡拉比特DL服务和JCR钩和访问...但我会失去兼容性和迁移的可能性我的仓库等

请有人协助这一个吗?谢谢

回答

1

这两个服务DLLocalServiceImplDLAppLocalServiceImpl都是,而且我想,这两个都很重要。前者如果直接访问存储库。请注意,通过此服务添加文件时,您需要将相应的DlFileEntry保存到数据库中,而不是引用addFile(....,fileEntryId,...)。

后者服务为您做了额外的工作,主要是资产管理和工作流程。

关于您的使用案例,我会避免使用文档库,因为没有元数据可以进入JCR存储库。实际上,只有您可以存储的元数据/定制属性为Liferay门户的custom propertiesExpando功能。

对于您来说,最好的方法似乎是实现您自己的jackrabbit挂钩,以将数据存储到存储库中,并让Liferay文档库使用该存储库。

2

SOLR用于索引,Jackrabbit用于文档存储。在代码中管理Liferay文档库相当简单,只需查看DL * LocalServiceUtil类即DLFolderLocalServiceUtilDLFileLocalServiceUtil即可。默认情况下,Liferay只是在硬盘上创建一个匹配的文件夹/文件结构(名称已更改),因此您只需要编写代码或使用Jackrabbit,如果您想要的比这更多,因为Liferay允许/下载和查看开箱即用通过控制面板和各种portlet。

我没有使用Liferay的JackRabbit,但一旦配置好了所有的东西都应该在封面下管理,你不需要在前端担心。

当你说“所有元数据”我不知道什么被保留,但除了重命名文件,以便它可以被追踪,不应该有任何其他的变化。通过上传每种类型的文件并检查LIFERAY/data/document_library目录和子目录中的条目,应该可以快速简单地进行测试。如果使用Jackrabbit,这又会有所不同。

+0

谢谢大卫,但恕我直言,你的答案不解决了,因为我觉得它可以由那些谁只回答在liferay中实际上使用了jackrabbit或alfresco。在6.x中API已经发生了很大变化,并且已经完成了强大的更改。即使像DLFileLocalServiceUtil这样的服务(如你所说)也不存在。但是DLAppLocalServiceUtil出现了,它不清楚它是如何工作的。因为我没有使用长耳兔或露天,我不知道如何延长它。通过“元数据”,我的意思是http://en.wikipedia.org/wiki/Dublin_Core,我所提到的所有文档都包含这些roperties。 – lisak 2011-02-28 10:41:48

+0

我检查了6.0.5 CE和6.0.11.1 EE SP1,它们都包含(例如)'com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil'in portal-service.jar,并且允许此jar被其他portlet引用由ClassLoader构建。我不确定你在看什么。 – 2011-02-28 10:53:47

+1

对不起6.x我引用了6.1还没有发布。我应该把它命名为6.1.x.自从10月份以来我正在努力。如果我没有记错,这些类在11月份已从主干中消失...只有DLLocalServiceUtil保留 – lisak 2011-02-28 11:01:30

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(); 
    } 
} 
+0

是否有任何其他方式处理liferay中的DuplicateFileException? – 2014-02-10 10:52:03