`

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

    4. **文件上传和下载**:Struts2支持文件上传,而底层实现就是Servlet API中的`Part`接口和`ServletFileUpload`类。你可以通过Action直接处理文件上传请求,进行文件验证、存储等操作。 5. **Filter和Dispatcher**...

    Struts2 part6:数据校验

    这篇博客“Struts2 part6:数据校验”可能详细介绍了如何在Struts2中实现对用户提交的数据进行验证。 Struts2的数据校验分为两个主要部分:客户端校验和服务器端校验。客户端校验通常使用JavaScript或者HTML5的表单...

    Struts2文件的上传和下载

    以下将详细介绍Struts2框架下如何进行文件的上传和下载。 首先,理解文件上传的基本原理至关重要。当在HTML表单中包含文件上传字段时,需要将表单的`enctype`属性设置为`multipart/form-data`。这是因为在默认的`...

    struts2多文件上传和下载

    然后,在Struts2的Action类中创建一个`List&lt;File&gt;`或`List&lt;Part&gt;`类型的属性来接收上传的文件。Action类中的方法需要使用`@FileUploadAction`注解,并在配置文件中设置允许上传的文件大小和类型。 2. **表单设计** ...

    Struts2的文件上传下载.rar

    在Struts2中,文件上传和下载是常见的功能,对于处理用户通过表单提交的文件数据非常有用。这篇教程将带你了解如何在Struts2中实现文件上传和下载,并涉及到国际化(i18n)的应用。 1. **文件上传**: - **配置...

    struts2异步多文件上传和下载

    在"struts2异步多文件上传和下载"的例子中,我们将探讨如何利用Struts2的特性来实现实时的、多文件上传以及带有进度条的单文件上传。 首先,文件上传在Web开发中是一项常见的需求,Struts2通过ActionContext类和...

    struts2part2

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

    struts2 实现文件批量上传

    3. **Action类处理**:在Struts2的Action类中,我们需要定义一个`List&lt;File&gt;`或`List&lt;Part&gt;`类型的字段,与前端的文件输入框名称对应。Struts2会自动将上传的文件绑定到这些字段。 4. **文件验证**:在处理文件上传...

    struts框架写的文件上传下载系统

    1. **文件上传**:用户登录后,可以使用系统提供的上传功能选择本地的文件,Struts框架通过Servlet API中的Part接口处理文件流,将文件从客户端传输到服务器的指定目录。此过程需要对文件大小、类型进行限制,以防止...

    struts2part1

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

    struts2 apps part2

    总的来说,"struts2 apps part2"涵盖了Struts2框架的深度使用和高级特性,包括Action、拦截器、视图技术、配置文件的详细解读,以及如何利用这些元素构建复杂的web应用。通过学习这部分内容,开发者可以提升在Struts...

    Struts2之Servlet文件上传详解案例struts010

    本案例“Struts2之Servlet文件上传详解”将聚焦于如何使用Struts2框架配合Servlet实现文件上传功能。在Web应用中,文件上传是一个常见的需求,例如用户可能需要上传头像、附件等。 首先,我们来理解文件上传的基本...

    Struts2文件上传源码

    6. **源码分析**: 要深入理解Struts2的文件上传机制,你需要查看Struts2的源码,特别是`org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest`和`org.apache.struts2.components.Form`这两个类。...

    struts2文件上传与下载

    Struts2会将上传的文件内容封装在`HttpServletRequest`对象的`Part`或`FileItem`中,我们可以通过`request`对象获取到这些数据。 3. **临时文件存储**:上传的文件通常首先会被存储在服务器的临时目录下,如`java....

    struts2 文件上传和下载

    - **MultipartResolver**: 在处理文件上传时,Struts2首先需要一个MultipartResolver来解析请求中的多部分数据(即文件)。Spring MVC框架中的CommonsMultipartResolver或Struts2自身的FileUploadInterceptor是两个...

    Struts2 单个、批量文件上传 精简源码

    在Struts2中,批量上传通常涉及到`List&lt;File&gt;`或`List&lt;Part&gt;`类型的属性,以接收多个文件。用户可以选择多个文件,然后这些文件会被一起发送到服务器。在Action中,你需要遍历这个列表并保存每个文件。 例如,批量...

    struts2 简单的文件上传

    在Struts2框架下实现文件上传,需要理解以下几个核心概念和步骤: 1. **Action类**:在Struts2中,Action类是业务逻辑的载体。你需要创建一个继承自`org.apache.struts2.interceptor.FileUploadInterceptor`支持...

    Struts2学习资源Result part1.rar

    Struts2是一个强大的Java web应用程序框架,用于构建和维护可扩展、模块化和易于管理的Web应用。Result是Struts2框架中的一个核心组件,它负责处理动作执行后的结果,如视图渲染、跳转等操作。在Struts2的学习过程中...

    struts2.part2

    在“轻量级应用Java EE企业实战”系列中,"struts2.part2"这部分可能涉及了更深入的Struts2使用技巧,如自定义拦截器的实现、Action的分层设计、动态结果集的配置以及与Ajax的集成等内容。学习这部分内容将有助于...

    Struts AJAX文件上传

    2. **添加Struts XML配置**:在Struts的配置文件(struts.xml)中,定义一个Action映射,将用户的文件上传请求映射到刚才创建的Action上。 3. **创建上传表单**:在HTML页面中,创建一个包含`&lt;input type="file"&gt;`...

Global site tag (gtag.js) - Google Analytics