一、Liferay的上传
Liferay的上传与普通的Struts上传下载略有区别,故在此介绍一下其过程:
上传文件时,注意form的提交方式,由于采用的是StrutsPortlet,所以必须在PortletAction的processAction()方法内进行处理,否则得不到要提交的数据(在普通的Struts的ACTION内是否可行,还未试过),不同的方式提交会进入不同的方法,要让提交进入PortletAction的processAction()方法,在提交form时可有两种选择:
1.
<form method="post"
id="fileUp"
action="<portlet:actionURL
windowState="<%= WindowState.MAXIMIZED.toString() %>">
<portlet:param
name="struts_action" value="" />
<portlet:param
name="tabs1" value="${tabs1}"/></portlet:actionURL>"
enctype="multipart/form-data"
method="post" name="<portlet:namespace />fm">
有几点要注意,首先是此时提交的method="post",
其次enctype="multipart/form-data"这是上传文件的基本步骤,
关键在于portlet:actionURL,为了确保执行到PortletAction的processAction(),必须用actionURL的方式提交。
2.
第二种提交方式相对第一种要简单一些:
<html:form
action="/?actionURL=true&tabs1=${tabs1}">
</html:form>
actionURL=true可以确保提交form时会执行PortletAction的processAction()方法,当然enctype="multipart/form-data"还是要加上,不过method="post"可以不要,因为html:form默认的提交方式就是post。如果用的是Struts,则ActionForm相对比较简单,只需要加相应的FormFile就行了,下面讲解一下在processAction()方法内上传文件的关键代码:
FormFile formFile = Form.getFormFile();
String fileName = formFile.getFileName();
byte[] bytes = formFile.getFileData();
//path为上传文件的路径
File uploadedFile = new File(path,fileName);
RandomAccessFile raf = new RandomAccessFile(uploadedFile,"rw");
raf.write(bytes);
raf.close();
上面的path如果要指定在当前工程目录下,可以在工程目录下新一个文件夹,如caller/attachments,caller指的是工程名,要让path指定为
caller/attachments,可以这样,
String path =
this.servlet.getServletContext().getRealPath("/attachments");
如果上传文件不大的话,最好还是存在数据库里面,这样的话管理上传文件会方便很多。
还有一个问题,虽然与上传文件本身并没有什么关系,但是也是由上传文件造成的,那就是上传以后该怎么跳转?因为processAction()返回的是空,而不是ActionForward。
跳转方式有两种,
通过ActionForward跳转
这种方式比较简单,只要进入了processAction()内,然后设置一下forward即可,具体代码如下:
this.setForward(request, "portlet.pagination.hello");
通过Action跳转
一般上传以后会重新执行查询,所以很可能会再执行另一个Action,而跳转到另一个Action的方法也有两种,一种是把ActionForward的名字直接写成Action的path(这种方法是比较复杂的了,有兴趣的可以研究一下,首先要求forward的name与path必须一样,还有什么redirect=true之类的东西),另一种则直接在processAction()方法进行处理:
PortletURL portletURL =
((ActionResponseImpl)response).createRenderURL();
portletURL.setParameter("struts_action", "");
portletURL.setParameter("tabs1", "");
response.sendRedirect(portletURL.toString());
到此,liferay的上传问题基本上讲完了,值得注意的是如果直接采用普通的Action的上传方式应该是可以的(其原理也是一样的),但是那样的话就不能在Action内部引用liferay的一些资源,故慎用之。
liferay的下载
Liferay的下载相对来说要简单一些,只要注意一些细节就可以了,如有一个超连接的代码:
<html:link action="?actionURL=true&windowState=${state}&fileName=${message.remark}">
文件名
</html:link>
其中唯一值得注意的是windowState=${state},表示打开此链接的状态,其state的值定义为:
String state = LiferayWindowState.EXCLUSIVE.toString();
在Action的具体的处理过程也比较简单,下面列出其关键代码:
String fileName = ParamUtil.getString(req, "fileName");
//也可以通过request.getParameter("")的方法获取参数值
File file = new File(filePath, fileName);
if (file.exists()) {
InputStream fis = null;
try {
fis = new FileInputStream(file);
ServletResponseUtil.sendFile(((ActionResponseImpl) res)
.getHttpServletResponse(), fileName, fis);
this.setForward(req, forward);
} catch (Exception e) {
System.err.println(fileName + " is not exist!");
}finally {
ServletResponseUtil.cleanUp(fis);
}
}
其中的filePath指的是文件存放的路径。有一点注意,那就是下载时有些时候会出现中文文件名为乱码的问题,在catalina.bat文件中有如下代码(可能属性多少不一样):
set JAVA_OPTS=
-Xms128m -Xmx768m -XX:MaxPermSize=128m
-Dfile.encoding=UTF8
-Duser.timezone=GMT+8 -Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.config
保证文件编码为UTF8的话就可以了,如果为GBK的话,需在Action内对文件名进行相应的转码。
至此,liferay的下载就讲完了,值得注意的其实struts自身也有用于下载的Action,
如果记得没错的话,应该是在Struts1.2.6更新的,那就是DownloadAction,其功能是比较完善的了,也比较好用,由于这属于Struts的知识,在此不做介绍,相信网上也有很多关于这方面的介绍。
分享到:
相关推荐
Liferay多文件上传与下载实例,前端包含多文件上传JS,可以动态追加文件,删除文件,还有文件类型与大小验证JS。后端可以批文件上传。 下载可以实现弹出页另存为。避免了Liferay自身下载PDF和图片时在当前页面打开的...
以下将详细介绍Liferay文档库上传下载实现的流程及原理。 1. **文件上传流程**: - **DLFILEENTRY表**:当上传一个文件时,系统首先会在DLFILEENTRY表中创建一条新记录,代表新添加的文档。这条记录包含了文件的...
本主题关注的是如何在Liferay7中集成Activiti BPM,并通过上传文件来部署流程模板。 首先,我们要理解Liferay7和Activiti的集成基础。Liferay7提供了丰富的API和插件机制,使得与第三方服务如Activiti的集成变得...
2. **liferay_4_portlet_development_guide.pdf**:该指南详细介绍了如何在Liferay平台上开发和部署portlet,包括portlet生命周期、MVC Portlet、JSR 286规范、portlet配置以及portlet与Liferay服务的集成。...
Liferay的资源可以在官方网站下载,包括Plugins SDK、Tomcat、Portal Source和IDE。将下载的资源解压,并将其存放在一个统一的目录下面,以便于后续的操作。 二、部署Liferay Liferay的部署需要将Tomcat拷贝到指定...
首先,文档会指导你下载Liferay的相应版本,接着是JDK 1.6的安装,这是运行Liferay所必需的Java开发环境。然后,安装MySQL数据库,因为Liferay通常与MySQL配合使用来存储数据。最后,需要配置Tomcat 6,这是一个流行...
为了插入多媒体素材,需要先将其上传至Liferay的知识库。 5. **发布内容**:完成编辑后,点击“发布”按钮使内容可见,或选择“作为草稿保存”以便后续进一步编辑。 #### 访问权限控制 Liferay提供了基于角色的访问...
【Liferay Portal 内容管理】是企业级门户平台Liferay Portal的重要组成部分,它提供了丰富的文档管理和信息发布功能,便于组织内部的信息共享与协作。 在Liferay Portal中,文档管理主要通过【Document Library】...
安装Liferay通常涉及下载Liferay的war文件,将其部署到Servlet容器(如Tomcat)中。开发者还可以使用Liferay IDE或Maven插件进行开发和构建。 11. **性能优化** 为了优化性能,Liferay提供了缓存机制、负载均衡、...
- **内容与文档管理场景**:此部分专注于对文档的上传、下载、浏览和搜索等操作。 #### 标准配置与方法论 为了确保测试结果的有效性和可靠性,本研究采用了严格的配置和方法论: - **环境配置**:测试在具有高...
- **内容管理**:Liferay内置了文档库,支持文件上传、版本控制和权限管理,方便用户分享和协作。 - **社区建设**:用户可以创建自定义社区,包含论坛、博客、日历等多种交互组件。 - **身份和访问管理**:通过...
在本文中,我们将深入探讨这个文件中与页面可见性、我的位置portlet(My Places Portlet)以及用户协议展示相关的配置,同时也会讨论关于文档库文件上传限制和图片上传大小的设置。 首先,让我们关注页面的公共和...
- **步骤**: 包括下载安装包、配置数据库连接、启动服务等。 ##### 第二节 Liferay Portal 的用户策略 - **定义用户**: 设置用户的登录信息、权限等。 - **添加/修改用户**: 通过管理界面完成用户信息的增删改查...
7. **发布与升级**:一旦应用测试通过,可以将WAR文件上传到Liferay的控制台进行发布,或者将更新的WAR文件放入Liferay的部署目录,系统会自动检测并更新portlet。 在提供的文件列表中,`build.properties`是Ant...
5. **部署portlet**:将WAR文件上传到Liferay Portal服务器的deploy目录下,服务器会自动检测并部署portlet。 6. **测试和调试**:在Liferay Portal上查看和测试portlet的功能,根据需要进行调整。 **Portlet API...
- `commons-fileupload-1.2.1.jar`:支持文件上传功能。 - `freemarker-2.3.15.jar`:提供模板引擎支持。 - `ognl-2.7.3.jar`:实现对象图导航语言(OGNL),Struts2表达式语言的核心。 - `struts2-core-2.1.8.1....
由于提供的部分内容包含大量无法识别的乱码,我们将主要依据标题、描述和标签来生成与Liferay相关的知识点。以下是对“Liferay学习笔记1”的详细解释和相关知识点的深入探讨: ### Liferay概述 Liferay是一款开源...
- **上传至 Liferay**:登录管理员界面,选择“控制面板”>“系统设置”>“设计”,然后上传主题包。 #### 三、Liferay 网站 CMS 内容管理 **3.1 CMS 相关概念诠释** - **内容管理系统 (CMS)**:Liferay 的 CMS ...
- **文档管理**:Liferay Portal 6内置了强大的文档管理系统,允许用户上传、分享和管理文档。此外,它还支持版本控制、文档生命周期管理等功能,确保文档的安全性和完整性。 - **工作流管理**:通过自定义的工作流...