簡體   English   中英

Liferay門戶網站中的文檔處理

[英]Document processing in Liferay portal

過去兩年我一直在使用Liferay,但我從未需要任何廣泛的文檔管理。

現在我有一個用戶上傳文檔的portlet(MS office OLE2文檔,ODS文檔,PDF等),我必須使用所有可用的元數據來保存它們。

我知道如果不使用Liferay我會怎么做,我可能會使用Apache解決方案與Apache Tika( UpdateRichDocumentsExtractingRequestHandler )或Apache Jackrabbit一起使用Apache Tika(org.apache.jackrabbit.extractor。*)。

問題是,如果我查看Liferay的主干,有一些關鍵類:

DLLocalServiceImpl直接使用的Hooks (JCRHook, FileSystemHook, CMISHook, s3Hook)直接

另一個替代方案是使用DLAppLocalServiceImpl ,它使用DLRepositoryLocalServiceImpl ,文件也通過Hooks持久存儲到存儲庫中,但是在那里完成了很多其他工作。

  1. Liferay中沒有jackrabbit-text-extractors庫,所以我想如果我想從PDF,DOC,ODS文檔中提取元數據,我會很難...因為DL服務層不接受其他屬性

    1. 我想我必須避免使用DL服務和JCR鈎子並直接訪問Jackrabbit ......但是我會失去兼容性並且可能會遷移我的存儲庫等。

可以請任何人合作這個嗎? 謝謝

SOLR用於索引,Jackrabbit用於文檔存儲。 在代碼中管理Liferay文檔庫非常簡單,只需查看DL * LocalServiceUtil類,即DLFolderLocalServiceUtilDLFileLocalServiceUtil 默認情況下,Liferay只是在硬盤驅動器上創建一個匹配的文件夾/文件結構(名稱已更改),因此您只需要編寫代碼或使用Jackrabbit,因為Liferay允許啟動/下載和查看開箱即用通過控制面板和各種portlet。

我沒有將LifeRabbit與Liferay一起使用,但是一旦配置好,所有內容都應該在封面下進行管理,你不必在前端擔心它。

當你說“所有元數據都可用”時,我不確定保留什么,但除了重命名文件以便跟蹤它之外,不應該有任何其他更改。 通過上傳每種類型的文件並檢查LIFERAY/data/document_library目錄和子目錄中的條目,可以快速輕松地進行測試。 如果使用Jackrabbit,這將是不同的。

我認為這兩個服務DLLocalServiceImplDLAppLocalServiceImpl都很重要。 前一個如果直接訪問存儲庫。 請注意,通過此服務添加文件時,您需要將相應的DlFileEntry保存到數據庫中,然后引用addFile(....,fileEntryId,...)。

后一項服務正在為您做更多的事情,主要是資產管理和工作流程。

關於您的用例,我會避免使用文檔庫,因為沒有元數據可以進入JCR存儲庫。 實際上,只有您可以存儲的元數據/自定義屬性才是Liferay門戶的custom properties AKA Expando功能。

最好的方法似乎是實現自己的jackrabbit鈎子將數據存儲到存儲庫中,讓Liferay文檔庫使用該存儲庫。

您需要始終使用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();
    }
}

認為埃德加是對的。 如果您通過http://svn.liferay.com/repos/public/portal/trunk/portal-service/src/com/liferay/documentlibrary/service/DLLocalService.java檢查當前主干(以訪客身份登錄,無密碼) ,您將不再找到DLFolderLocalServiceUtil類。 我們也在使用現有的DLFolderLocalServiceUtil類。 謝謝你的提醒。 我們將重構我們的代碼,所以當6.1出現時我們仍然可以使用DocumentLibrary服務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM