[Java][Liferay] File system in liferay

来源:http://www.cnblogs.com/chenyongblog/archive/2016/10/27/6005224.html
-Advertisement-
Play Games

`EditFileEntryAction.java` 文件路徑在資料庫中的dlfileentry中存儲,與bundle/data/document_library的對應關係如下: | Table Column | companyid | folderid | treepath | name | | ...


EditFileEntryAction.java

protected FileEntry updateFileEntry(PortletConfig portletConfig, ActionRequest actionRequest, ActionResponse actionResponse)
        throws Exception {
    /* 此處強轉獲取uploadPortletRequest,用於獲取InputStream,也可以使用如下代碼:
     * HttpServletRequest request = serviceContext.getRequest();
     * UploadRequest uploadRequest = PortalUtil.getUploadServletRequest(request);
     * inputStream = uploadRequest.getFileAsStream(fieldName);
     */
    UploadPortletRequest uploadPortletRequest = PortalUtil.getUploadPortletRequest(actionRequest);

    ...

    // 獲取folderId, 如果自己創建的話,要走DLFolderLocalServiceUtil.java
    if (folderId > 0) {
        Folder folder = DLAppServiceUtil.getFolder(folderId);

        if (folder.getGroupId() != themeDisplay.getScopeGroupId()) {
            throw new NoSuchFolderException("{folderId=" + folderId + "}");
        }
    }

    InputStream inputStream = null;

    try {
        String contentType = uploadPortletRequest.getContentType("file");

        // inputStream.available()用於獲取size
        long size = uploadPortletRequest.getSize("file");

        ...

        // 獲取inputStream
        inputStream = uploadPortletRequest.getFileAsStream("file");

        ServiceContext serviceContext = ServiceContextFactory.getInstance(DLFileEntry.class.getName(), uploadPortletRequest);

        FileEntry fileEntry = null;

        // Add file entry

        fileEntry = DLAppServiceUtil.addFileEntry(
            repositoryId, folderId, sourceFileName, contentType, title,
            description, changeLog, inputStream, size, serviceContext);

        // Update file entry and checkin

        fileEntry = DLAppServiceUtil.updateFileEntryAndCheckIn(
                fileEntryId, sourceFileName, contentType, title,
                description, changeLog, majorVersion, inputStream, size,
                serviceContext);
}

DLAppServiceUtil.java

public FileEntry addFileEntry(long repositoryId, long folderId, String sourceFileName, String mimeType, String title,
        String description, String changeLog, InputStream is, long size, ServiceContext serviceContext)
        throws PortalException, SystemException {

            ...

            File file = null;

            try {
                /* 創建tempFile,inputStream讀取的文件放在tomcat-7.0.62/temp/xxxfile
                 * 根據inputStream創建一個tempFile,然後存儲對應的關係到資料庫,文件根據資料庫中的路徑存放在bundle/data/document_library下
                 */
                file = FileUtil.createTempFile(is);

                return addFileEntry(repositoryId, folderId, sourceFileName, mimeType, title,
                        description, changeLog, file, serviceContext);
            } catch (IOException ioe) {
                throw new SystemException("Unable to write temporary file", ioe);
            } finally {
                // 不論addFile是否成功都會刪除臨時文件
                FileUtil.delete(file);
            }
        }
    }
    ...
}

文件路徑在資料庫中的dlfileentry中存儲,與bundle/data/document_library的對應關係如下:

Table Column companyid folderid treepath name
Path document_library/ companyid folderid /folderid/

存儲的文件名會有1。0,2.0之類的,標記的是文件的版本,具體在dlfileversion這張表中

...待續


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Permission deny 許可權 拒絕 查看許可權 ls -a ls -la expression 查看文件夾裡邊東西的許可權 用戶群的分類 組群:一個操作系統可能幾個人同時用 方便小組的文件安全和共用 用戶 組群(在一個組裡邊的) Others root rws rws rws 天神 使用者/ro ...
  • ...
  • 首先聲明,代碼是從一個大神的源碼里偷來的,我稍微整理了一下,現在可以通用。 作用是把你現有的資料庫表結構和數據生成yii2的遷移文件 1.下載模塊源碼解壓縮到 backend/modules/ 2.在 backend/config/main.php 添加如下配置 3.在你的後臺訪問 模塊下載地址 : ...
  • 創建線程的第一種方式: 這種方式的特點(缺陷):線程任務和線程是綁定在一起的。 示例: 四個視窗同時賣票 因為是同時,所以使用多線程。 創建四個線程,都是賣票。 因為都是賣票,所以四個線程的任務是一樣的。 只需要定義一個類繼承Thread。 為瞭解決四個線程共用票的問題,需要使用創建線程的第二種方式 ...
  • 如果對什麼是線程、什麼是進程仍存有疑惑,請先Google之,因為這兩個概念不在本文的範圍之內。 用多線程只有一個目的,那就是更好的利用cpu的資源,因為所有的多線程代碼都可以用單線程來實現。說這個話其實只有一半對,因為反應“多角色”的程式代碼,最起碼每個角色要給他一個線程吧,否則連實際場景都無法模擬 ...
  • Java類庫里有四個表示流的抽象類:InputStream、OutputStream、Reader、Writer。 其中 InputStream 和 OutputStream 是對位元組進行操作的輸入流和輸出流;Reader 和 Writer 是對字元操作的輸入輸出流。 它們是抽象類,在用它們的時候必 ...
  • 英文文檔: format(value[, format_spec]) Convert a value to a “formatted” representation, as controlled by format_spec. The interpretation of format_spec wi ...
  • ArrayDeque 數組迴圈隊列,這個數據結構設計的挺有意思的。 據說此類很可能在用作堆棧時快於 Stack,在用作隊列時快於 LinkedList。 一、容量 1.1預設容量是8=2^3 1.2指定初始化容容量 此方法是給數組分配初始容量,初始容量並不是numElements,而是大於指定長度的 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...