Struts2对文件的下载做了很优雅的处理,配置起来很简单,使用也很方便。
在本文中,你将学会最基础的download案例,和最优雅的download案例。
优雅之处:
1、不适用特定的new File加载文件。
2、文件名灵活,无需写死。
3、MimeType灵活,无需写死。
如主页的说明--“非技术流”, 表达不精确的地方,各位包涵。废话不说,上货!
环境: JDK6update16 EclipseJEE 3.4.2 Struts2.1.8
下载流程概览:
HttpRequest ---> DownloadAction ---> SUCCESS Result --> 输出流
STEP01 写一个DownloadAction
package study.action;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletContext;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public class DownloadAction extends ActionSupport implements
ServletContextAware {
private static final long serialVersionUID = 1L;
private ServletContext context;
private String filename;
private String mimeType;
private InputStream inStream;
@Override
public String execute() throws Exception {
mimeType = context.getMimeType(filename);
return SUCCESS;
}
public InputStream getInStream() {
inStream = context.getResourceAsStream("/doc/" + filename);
if (inStream == null) {
inStream = new ByteArrayInputStream("Sorry,File not found !"
.getBytes());
}
return inStream;
}
public String getMimeType() {
return mimeType;
}
public void setFilename(String filename) {
try {
this.filename = new String(filename.getBytes("ISO8859-1"),"GBK");
} catch (UnsupportedEncodingException e) {
}
}
public String getFilename() {
try {
return new String(filename.getBytes(),"ISO8859-1");
} catch (UnsupportedEncodingException e) {
return this.filename;
}
}
@Override
public void setServletContext(ServletContext context) {
this.context = context;
}
}
说明:
1、在下载的Action中,必须有个InputStream类型的field和对应的get方法。
2、下载时方便,将文件名、MIMETYPE都写在了Action中。
然后,配合Result类型:
<action name="download" class="study.action.DownloadAction">
<result type="stream">
<param name="contentType">${mimeType}</param>
<param name="inputName">inStream</param>
<param name="contentDisposition">attachment;filename="${filename}"</param>
</result>
</action>
最后,看图:
看看中文问题(具体的解决办法没有,这种只是在我的机子上可以。。。)
解释说明:
1、为了获取到MIMETYPE,利用了ServletContext的方法。所以必须获得ServlerContext这个对象。本例子中采用DI的方法,有Struts2在运行时注入。
2、为了能在HTTP Response中使用到 MIMETYPE,所以在Action中提供了对应的get方法,以供OGNL表达式需要。
- 大小: 20.6 KB
- 大小: 62.3 KB
分享到:
相关推荐
网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载...
struts2文件下载,后台action类及struts配置文件。
struts2实现的文件上传下载,上传文件重命名(按时间戳)
本文档对利用struts2 注解 annotation 实现文件下载作了简单介绍,并有代码为例,希望对学习struts2注解annotation的人有帮助,特别是需要动态传参方面。
download & upload using struts2
用struts1实现文件的上传和下载,在本机已测试成功,一个简单的实现文件上传和下载的功能
有关struts2下载组件的具体介绍我就在此略过了,看此文的同志想必大多是碰到这样让人很是不爽的问题。 下面就将该问题的最终解决办法介绍如下。 问题概要: 在struts2中使用result里type="stream"的结果类型时,...
struts1.x的例子,struts2.x可以参考自己修改 1.action的写法 import java.io.*; import java.sql.*; import java.util.ArrayList; import javax.servlet.http.HttpServletRequest; import javax.servlet....
下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到struts-2.1.0-src"struts-2.0.10"src"core"src"main"java目录下查看Struts2的源文件
2 JDK5.0及以上版本. 3 ECLIPSE3.2 及以上版本. 4 MySQL5.0 注意事项: 1 TOMCAT安装路径中请不要包含中文字符,否则程序将不能正常运行. 目录及文件: debug\document PDM及数据库脚本。 作者留言: 本程序是作者...
通过struts2框架(是 http://download.csdn.net/download/wuxinxing1981/10189157 的简化版本),结合mysql数据库构建一个学生报到管理系统,来模拟学生报到登记的过程。基本功能包含如下: 管理角色登录,登录不同...
struts2的XML文件的dtd,有2.0至2.3的。
struts2+SqlServer2005 这个包里面缺少数据库的日志文件,这个是我最新的里面包含日志文件,链接地址如下,拷贝到浏览器里即可: http://download.csdn.net/source/1840858
struts2权威指南 电子书 配套源码 文件大小153mb 分为8个压缩包,每分卷1分,每分卷20兆(最多只让上传20兆,没有办法) struts2权威指南电子书连接:http://sdan250.download.csdn.net/user/sdan250/all/3
struts2+extjs中File的upload&download;&delete;例子及说明,有图及文字说明~~初学者还挺有帮助的~~
struts2权威指南 电子书 配套源码 文件大小153mb 分为8个压缩包,每分卷1分,每分卷20兆(最多只让上传20兆,没有办法) struts2权威指南电子书连接:http://sdan250.download.csdn.net/user/sdan250/all/3
Struts2框架实现的文件上传与下载系统。有详细的源码。
Struts2.0+jquery.progressbar实现上传文件进度条 附带实例源码 uploadJqueryProgress.jsp uploadprogress.jsp 两个上传页面,两种不一样风格的进度条。uploadJqueryProgress.jsp 是在 uploadprogress.jsp 的基础...
struts2+hibernate3+spring3 例子(完整项目带 数据库文件) 可以直接运行 由于上传空间限制,部分jar地址http://download.csdn.net/source/2299572
struts-2.3.14官网下载,因为文件过大,限制上传文件的大小,故把源代码分离,该zip文件中包含官方jar包和例子 源码下载地址 http://download.csdn.net/detail/ahuangtaoa/5380477