`

liferay5.2.3 附件上传

 
阅读更多

附件上传

 

首选说一下文件的存放位置,存放目录大致如下:

 {bundles.home}/data/document_library/10115/0/customerDirName/0/fileName/1.0

 

 

这里主要是利用liferay现有的文档库,当然这些文件在文档库是看不到的!

 

 

下面说一下具体的实现:

 

1、首先要在liferay项目中的service.xml  中找到需要关联附件的表对应的entity标签,,在</entity>之前加上

 

<reference package-path="com.liferay.documentlibrary" entity="DL" />

 

大致表示的的是与文档库对应的接口相关联,只有这样才能在自己的实体类对应的service层的实现类中调用文档库提供的dlService对象,下面会看到的具体的使用的

 

例如:

 

    <entity name="Contract" local-service="true" remote-service="false">

        <column name="contractId" type="long" primary="true" />

        <column name="companyId" type="long" />

        <column name="name" type="String" />

 

        <column name="haveAuthorizationBook" type="boolean" /><!-- 这里是用来标示是不是有附件的一个字段-->

        <column name="authorizationBookName" type="String" />

                 <!-- 这里是有附件文件的名字的字段-->

 

        <finder name="CompanyId" return-type="Collection">

            <finder-column name="companyId" />

        </finder>

       

        <!-- References -->

      <reference package-path="com.liferay.documentlibrary" entity="DL"></reference>

    </entity>

 

2、就是对jsp(或者html)中的表单加上一个属性enctype="multipart/form-data"

(就是上传文件所需要的表单属性,你懂的)

 

<form  action=""  method="post"  enctype="multipart/form-data">

 

这里有需要上传文件的选择框

 

<inputname="AuthorizationBook" size="70"  type="file" />

 

</form>

 

3.就是保存表单提交给服务器的处理了

首先就是要获得一个uploadRequest 对象

 

UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);

 

之后传递过来的参数都需要通过uploadRequest 对象才能够获得哦!

 

如:String name = ParamUtil.getString(uploadRequest, "name");

 

下面就是获得要上传的文件了

 

File file = uploadRequest.getFile(fileParamName);

        String fileName = uploadRequest.getFileName(fileParamName);

byte[] bytes = FileUtil.getBytes(file);

 

 

    String dirName = TextUtil.getAnnexPath("contract_authorization_book", contract.getCreateUserId(), contract.getContractId());// 这个是用来获得附加要存放的在文档库中的路径的,可以自行定义,这里获得结果是使用字符串拼成的路径,规则是:三个参数相连接。这只是个例子,可以自由发挥的!!

 

 

 

contract.setAuthorizationBookName(fileName);

merge = contract.getHaveAuthorizationBook();

contract.setHaveAuthorizationBook(true);

 

ContractLocalServiceUtil.updateContractRealtionFile(contract, dirName, fileName,bytes, merge); //这个方法是在ContractLocalServiceImpl中实现的

 

4.ContractLocalServiceImpl中的实现

 

 

publicvoid updateContractRealtionFile(Contract contract,String dirName,String fileName,byte[] bytes,boolean hadDirectory) throws SystemException, PortalException{

           

long companyId=contract.getCompanyId();

//下面三个是liferay中的几个常量。

String portletId = CompanyConstants.SYSTEM_STRING;

long groupId = GroupConstants.DEFAULT_PARENT_GROUP_ID;

long repositoryId = CompanyConstants.SYSTEM;

           

           

if(hadDirectory){

try {

    dlService.deleteDirectory(companyId, portletId, repositoryId, dirName);

        }catch (NoSuchDirectoryException nsde) {

    if (_log.isDebugEnabled()) {

        _log.debug(nsde.getMessage());

        }

}

}

           

dlService.addDirectory(companyId, repositoryId, dirName);

               

try {

    dlService.addFile(companyId, portletId, groupId, repositoryId,dirName + File.separator + fileName, 0, StringPool.BLANK,

contract.getCreateDate(), new String[0], new String[0],bytes);

}catch (DuplicateFileException dfe) {

    if (_log.isDebugEnabled()) {

        _log.debug(dfe.getMessage());

    }

}

contractPersistence.update(contract);

}

 

 

 

在这个方法中含有相应的逻辑处理,除了上面标红的部分要注意外,对于dlService方法的调用可以自由发挥的

 

 

5.附件的显示

 

<c:if test="<%=contract.getHaveAuthorizationBook() %>">

    <li class="shortItem">

    <span>

    <liferay-ui:message key="authorization.book.file" />

    </span>

 

    <label>

<a href="<portlet:actionURL windowState="<%= LiferayWindowState.EXCLUSIVE.toString() %>">

<portlet:param name="<%=ActionRequest.ACTION_NAME  %>" value="get.contract.annex.file" />

 

<portlet:param name="contractId" value="<%= String.valueOf(contract.getContractId()) %>" />

 

<portlet:param name="flagDirectory" value="<%=Constants.CONTRACT_ANNEX_AUTHORIZATION_BOOK %>" />

                    </portlet:actionURL>">

 

<%=contract.getAuthorizationBookName() %>

</a></label>

    </li>

</c:if>

 

 

6、下载

 5中已经把下载的连接写出来了,这里就是后台的处理了,如下:

String  fileName = contract.getAuthorizationBookName();

 

String  filePath = TextUtil.getAnnexPath("contract_authorization_book

", createUserId, contractId)+separator+fileName;//这个与上面保存文件使用的是同一个方法获得路径

 

 

 

            HttpServletResponse response=PortalUtil.getHttpServletResponse(portletResponse);

            InputStream is = null;

           

            try {

                is = DLLocalServiceUtil.getFileAsStream(

                        companyId, CompanyConstants.SYSTEM, filePath);

                int contentLength = (int)DLServiceUtil.getFileSize(

                        companyId, CompanyConstants.SYSTEM, filePath);

                response.setHeader(

                        HttpHeaders.CACHE_CONTROL, HttpHeaders.CACHE_CONTROL_PUBLIC_VALUE);

                response.setHeader(HttpHeaders.PRAGMA, HttpHeaders.PRAGMA_PUBLIC_VALUE);

               

                String contentDisposition =

                   "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"),"ISO-8859-1") + "\"";

                response.setContentLength(contentLength);

                response.setHeader(

                        HttpHeaders.CONTENT_DISPOSITION, contentDisposition);

                write(response, is, contentLength);

               

            }

            finally {

                ServletResponseUtil.cleanUp(is);

            }  

 

 

 

下面是就是附带的几个下载的时候需要的方法

 

 

    publicstaticvoid write(

            HttpServletResponse response, InputStream is, int contentLength)

        throws IOException {

 

        OutputStream os = null;

 

        try {

            if (!response.isCommitted()) {

                if (contentLength > 0) {

                    response.setContentLength(contentLength);

                }

 

                os = new BufferedOutputStream(response.getOutputStream());

 

                int c = is.read();

 

                while (c != -1) {

                    os.write(c);

 

                    c = is.read();

                }

            }

        }

        finally {

            cleanUp(os, is);

        }

    }

   

    publicstaticvoid cleanUp(OutputStream os, InputStream is) {

        cleanUp(os);

        cleanUp(is);

    }

    publicstaticvoid cleanUp(OutputStream os) {

        try {

            if (os != null) {

                os.flush();

            }

        }

        catch (Exception e) {

            if (_log.isWarnEnabled()) {

                _log.warn(e);

            }

        }

 

        try {

            if (os != null) {

                os.close();

            }

        }

        catch (Exception e) {

            if (_log.isWarnEnabled()) {

                _log.warn(e);

            }

        }

    }

    publicstaticvoid cleanUp(InputStream is) {

        try {

            if (is != null) {

                is.close();

            }

        }

        catch (Exception e) {

            if (_log.isWarnEnabled()) {

                _log.warn(e);

            }

        }

    }

   

 

 

 

 

附注,因为在程序涉及到了比较多的逻辑处理,这里写是最主要的过程,具体的逻辑处理可以自己发挥!

分享到:
评论

相关推荐

    Liferay_5.2.3_环境搭建

    【Liferay 5.2.3 环境搭建】是指在本地计算机上配置和安装Liferay Portal 5.2.3版本的过程。Liferay是一个全面的门户平台,基于Java Enterprise Edition (J2EE) 技术构建,利用EJB(Enterprise JavaBeans)和JMS...

    Liferay 5.2.3 开发环境环境搭建.doc

    【Liferay 5.2.3 开发环境搭建】 Liferay 是一款强大的开源门户平台,基于J2EE架构,融合了EJB、JMS等多种技术。它的前端使用Struts MVC框架,通过XML配置文件实现portlet的动态扩展。此外,Liferay还集成了Web服务...

    Liferay5.2.3 样例Portlet

    Liferay5.2.3的样例,通过war.bat打包后发布到相应的liferay环境即可。 另外,需要配置context,tomcat中的代码如下: &lt;/Context&gt;

    liferay5.2.3 tomcat6 eclipse ide 开发文档

    ### Liferay 5.2.3 Tomcat6 Eclipse IDE 开发文档详解 #### 一、前言 **1.1 编写说明** 本开发文档旨在为初学者和经验丰富的开发者提供全面指南,涵盖Liferay 5.2.3与Tomcat6在Eclipse IDE中的集成、配置和开发...

    Liferay 5.2.3 二次开发环境搭建

    本篇文章将详细讲解如何在基于Myeclipse 6和Tomcat 6.0.24的环境中搭建Liferay 5.2.3的二次开发环境。 **一、环境准备** 在开始Liferay的开发工作之前,我们需要准备好以下软件: 1. **Myeclipse 6**: 这是一个...

    Liferay5.2.3和CAS配置成SSO

    本案例中,我们将探讨如何将Liferay 5.2.3与CAS(Central Authentication Service)配置为SSO系统。 Liferay是一款开源的企业级门户平台,它提供了一个灵活的框架来构建和管理Web应用程序。而CAS则是一个开源的身份...

    liferay 5.2.3 可實際用於建構 jbpm workflow portlet的 jbpm及mule war檔

    liferay 5.2.3 可實際用於建構 jbpm workflow portlet的 jbpm檔。 用這個檔案加上mule再參考網路上的設定文件,即可輕易的在5.2.3上完成workflow portlet的建置... mule檔太大,請在liferay網路上下載即可

    Liferay_5.2.3_开发环境环境搭建

    - **下载Liferay 5.2.3**:首先,你需要从Liferay的官方仓库或互联网存档中下载Liferay Portal 5.2.3 GA4的版本。确保选择适合你的操作系统的版本,通常有Windows、Linux和Mac OS X可供选择。 - **开发工具**:...

    构建统一门户Liferay 最新产品 5.2.3二次开发环境

    本教程将聚焦于Liferay 5.2.3版本的二次开发环境搭建,这将为开发者提供一个深入理解Liferay工作原理并进行自定义扩展的基础。 首先,我们需要下载Liferay 5.2.3的源码。Liferay的源代码可以从其官方网站的历史版本...

    liferay plugins sdk 5.2.3

    Liferay Plugins SDK 5.2.3 是一个专门用于开发Liferay Portal的portlet和其他插件的应用开发工具包。Liferay Portal是一款开源的企业级内容管理平台,它提供了丰富的功能,包括网站构建、社交网络、协作工具等。这...

    Liferay-Portlet-SDK5.2.3.rar_liferay_liferay sdk_portlet

    5. **部署portlet**:将WAR文件上传到Liferay Portal服务器的deploy目录下,服务器会自动检测并部署portlet。 6. **测试和调试**:在Liferay Portal上查看和测试portlet的功能,根据需要进行调整。 **Portlet API...

    Liferay相关资料

    本压缩包中的资料主要涵盖了Liferay 5.2.3版本以及一些相关的Struts-portlet和JSF-portlet开发知识。 1. **Liferay Portal 权限管理**: Liferay的权限系统是其核心功能之一,它允许管理员精细控制用户对门户资源...

    liferay portal搭建资料1223

    本篇将详细介绍如何搭建Liferay 5.2.3的开发环境。 1. 关于 Liferay Liferay Portal提供了丰富的功能,如内容管理、文档共享、论坛、博客、工作流等,并支持多语言、多主题、自定义portlet等特性。5.2.3是Liferay的...

    Liferay_5[1].2.3_环境搭建

    【Liferay 5.2.3 环境搭建】是指在本地计算机上配置和安装 Liferay Portal 5.2.3 版本的过程。Liferay 是一款基于 J2EE 技术的开源门户平台,它集成了多种技术,如 EJB、JMS、Struts MVC 框架和 Lucene 全文检索。该...

    portal pack 3.0.2 Liferay Portlet 开发工具

    Support For Liferay 5.2.3 & Web space 10.0 U4 Support For both NetBeans 6.5.x & 6.7 Page Navigation Fix For Visual JSF Portlet

    Liferay 多文件上传与下载实例

    Liferay多文件上传与下载实例,前端包含多文件上传JS,可以动态追加文件,删除文件,还有文件类型与大小验证JS。后端可以批文件上传。 下载可以实现弹出页另存为。避免了Liferay自身下载PDF和图片时在当前页面打开的...

    liferay portal web project搭建

    app.server.parent.dir=D:/StationPlatform/liferay-portal-tomcat-6.0-5.2.3/liferay-portal-5.2.3 app.server.tomcat.version=6.0 app.server.tomcat.dir={app.server.parent.dir}/tomcat-6.0.18 ``` **4. ...

    liferay的上传与下载

    在Liferay中实现上传和下载功能是企业级应用中常见的需求。Liferay提供了多种方式来处理文件的上传和下载,以便用户能够方便地管理他们的文档和资源。本文将详细探讨两种主要的方法,并提供一个基于JSP的简单示例。 ...

    Liferay Portal Liferay IDE

    Liferay Portal Liferay IDE

Global site tag (gtag.js) - Google Analytics