Struts2的文件下载(download)

本文介绍如何在Struts2框架中实现优雅的文件下载功能。通过实例展示如何配置及使用Struts2进行文件下载,包括文件名和MimeType的灵活处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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表达式需要。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值