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