jsp,href为get提交
<a href="${pageContext.request.contextPath }/demo02/download.action?filename=MIME协议简介.txt">MIME协议</a> <a href="${pageContext.request.contextPath }/demo02/download.action?filename=Struts2上传下载.ppt">Struts2上传下载.ppt</a> <a href="${pageContext.request.contextPath }/demo02/download.action?filename=老男孩.mp3">老男孩.mp3</a>
action
1、结果集类型使用stream,服务器端通过流的方式将文件发给客户端
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
查看StreamResult类,需要设置一个流,两个头
// contentType头信息 (下载文件对应 MIME协议规定类型 )* html --- text/html . txt--- text/plain protected String contentType = "text/plain"; // ContentDisposition头信息 (下载文件打开方式 inline浏览器内部打开, attachment 以附件形式打开) protected String contentDisposition = "inline"; // 需要Action中 提供 getInputStream 方法 返回 InputStream 提供下载文件 内容 protected String inputName = "inputStream";
2、获取InputStream数据流
3、获取文件MIME类型
4、根据不同浏览器设置下载时显示的文件名
5、get提交获取文件名乱码
public class DownloadAction extends ActionSupport { private String filename; @Override public String execute() throws Exception { return SUCCESS; } public void setFilename(String filename) throws UnsupportedEncodingException { this.filename = new String(filename.getBytes("ISO-8859-1"), "utf-8"); } public InputStream getInputStream() throws FileNotFoundException { File file = new File(ServletActionContext.getServletContext().getRealPath("/download") + "/" + filename); return new FileInputStream(file); } public String getContentType() { return ServletActionContext.getServletContext().getMimeType(filename); } public String getFilename() throws IOException { // 附件名乱码 问题 (IE和其它浏览器 : URL编码 , 火狐: Base64编码) String agent = ServletActionContext.getRequest().getHeader("user-agent"); return encodeDownloadFilename(filename, agent); } /** * 下载文件时,针对不同浏览器,进行附件名的编码 * * @param filename * 下载文件名 * @param agent * 客户端浏览器 * @return 编码后的下载附件名 * @throws IOException */ public String encodeDownloadFilename(String filename, String agent) throws IOException { if (agent.contains("Firefox")) { // 火狐浏览器 filename = "=?UTF-8?B?" + new BASE64Encoder().encode(filename.getBytes("utf-8")) + "?="; } else { // IE及其他浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; } }
strtus配置,通过ognl访问Action中函数
<action name="download" class="demo02.DownloadAction"> <result type="stream"> <param name="contentType">${contentType}</param> <param name="contentDisposition">attachment;filename=${filename}</param> </result> </action>
相关推荐
NULL 博文链接:https://mvplee.iteye.com/blog/2240323
struts2part2,由于文件太大无法一次上传,分成两部分,请用文件合并工具进行合并。文件合并工具见本人资源。
struts2.3.14part1,文件太大无法一次上传,分割成part1和part2,用文件合并工具进行合并即可。
基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...
基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...
非常好非常详细的struts2标签的学习资料,自己也正在用。由于附件只能上传15MB以下的文件,只能分卷了,请下载part1和part2后,放于同一目录下解压。
基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...
Struts2权威指南——完整版PDF 资源分2个文件请分别下载一起解压
J2EE 企业应用实战:Struts Spring Hibernate 整合开发 文件过大``分2部分 此为Part2
struts2概述 strust2下的HelloWorld struts2基础 深入struts2 struts2类型转换 文件的上传和下载 ... 这本书太大了,我把它分为了12部分上传,给大家造成的不便,还请谅解
Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。
Struts2权威指南——完整版PDF 资源分2个文件请分别下载一起解压
第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...
struts2概述 strust2下的HelloWorld struts2基础 深入struts2 struts2类型转换 文件的上传和下载 ... 这本书太大了,我把它分为了12部分上传,给大家造成的不便,还请谅解
Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。
Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。
Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。
Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。