`

Struts2 part8:文件下载

 
阅读更多

 

 

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>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Struts2 part 3:在Action中使用ServletAPI

    NULL 博文链接:https://mvplee.iteye.com/blog/2240323

    struts2part2

    struts2part2,由于文件太大无法一次上传,分成两部分,请用文件合并工具进行合并。文件合并工具见本人资源。

    struts2part1

    struts2.3.14part1,文件太大无法一次上传,分割成part1和part2,用文件合并工具进行合并即可。

    精通Struts:基于MVC的Java Web设计与开发.part3

    基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...

    精通Struts:基于MVC的Java Web设计与开发.part2

    基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...

    struts2标签详解part2

    非常好非常详细的struts2标签的学习资料,自己也正在用。由于附件只能上传15MB以下的文件,只能分卷了,请下载part1和part2后,放于同一目录下解压。

    精通Struts:基于MVC的Java Web设计与开发.part1

    基于MVC的Java Web设计与开发》22.9Mb,清晰版,原来传的时候附件只能是5Mb,一共有五个,有点麻烦,现在能传10Mb的所以分成三块压缩再传了一遍,下载后把三个压缩文件的文件名改为“精通Struts:基于MVC的Java Web...

    Struts2权威指南.part2

    Struts2权威指南——完整版PDF 资源分2个文件请分别下载一起解压

    J2EE 企业应用实战:Struts Spring Hibernate 整合开发 Part2

    J2EE 企业应用实战:Struts Spring Hibernate 整合开发 文件过大``分2部分 此为Part2

    struts2 权威指南 基于webWork核心的MVC开发 part8

    struts2概述 strust2下的HelloWorld struts2基础 深入struts2 struts2类型转换 文件的上传和下载 ... 这本书太大了,我把它分为了12部分上传,给大家造成的不便,还请谅解

    Struts 2权威指南part01

    Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。

    Struts2权威指南.part1

    Struts2权威指南——完整版PDF 资源分2个文件请分别下载一起解压

    精通struts:基于mvc的java web设计与开发part2

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...

    struts2 权威指南 基于webWork核心的MVC开发 part2

    struts2概述 strust2下的HelloWorld struts2基础 深入struts2 struts2类型转换 文件的上传和下载 ... 这本书太大了,我把它分为了12部分上传,给大家造成的不便,还请谅解

    Struts 2权威指南part02.rar

    Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。

    Struts 2权威指南part10.rar

    Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。

    Struts 2权威指南part03.rar

    Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。

    Struts 2权威指南part04.rar

    Struts 2权威指南--基于WebWork核心的MVC开发,作者:李刚,由于文件太大现共分为10个包,请下载完10个包才能正常解压。

Global site tag (gtag.js) - Google Analytics