当前位置: 首页 > news >正文

[Java][Liferay] File system in liferay

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 Columncompanyidfolderidtreepathname
Pathdocument_library/companyidfolderid/folderid/

存储的文件名会有1。0,2.0之类的,标记的是文件的版本,具体在dlfileversion这张表中

...待续

转载于:https://www.cnblogs.com/chenyongblog/p/6005224.html

相关文章:

  • 用for、while、do-while循环输出10句“好好学习,天天向上!”
  • 常见标签的全称
  • 【EntityFramework Core】实体实例化注入
  • apiCloud中的API对象
  • 静态链接
  • 多大开始玩EV3
  • HTTP/2探索第一篇——概念
  • Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
  • (BFS)hdoj2377-Bus Pass
  • 最少交换次数
  • 团队作业三之问题解答
  • srand()、rand()、time()函数的用法
  • 更改pip源至国内镜像,显著提升下载速度(转载)
  • 如何用distinct消除重复记录的同时又能选取多个字段值?
  • JavaScript之继承(原型链)
  • Github访问慢解决办法
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Linux后台研发超实用命令总结
  • V4L2视频输入框架概述
  • Vim 折腾记
  • 电商搜索引擎的架构设计和性能优化
  • - 概述 - 《设计模式(极简c++版)》
  • 前端性能优化——回流与重绘
  • 前端之React实战:创建跨平台的项目架构
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 译米田引理
  • Spring Batch JSON 支持
  • 积累各种好的链接
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • $.ajax中的eval及dataType
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (Git) gitignore基础使用
  • (第一天)包装对象、作用域、创建对象
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (生成器)yield与(迭代器)generator
  • @开发者,一文搞懂什么是 C# 计时器!
  • @软考考生,这份软考高分攻略你须知道
  • [ArcPy百科]第三节: Geometry信息中的空间参考解析
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [c++] 自写 MyString 类
  • [fsevents@^2.1.2] optional install error: Package require os(darwin) not compatible with your platfo
  • [javaSE] 看知乎学习工厂模式
  • [jQuery]10 Things I Learned from the jQuery Source
  • [Linux] day07——查看及过滤文本
  • [MySQL]基础的增删改查
  • [NAND Flash 6.1] 怎么看时序图 | 从时序理解嵌入式 NAND Read 源码实现
  • [PostgreSQL的 SPI_接口函数]
  • [SharePoint][SharePoint Designer 入门经典]Chapter13 客户端Silverlight编程
  • [Unity]关于Unity接入Appsflyer并且打点支付