Struts2文件下载功能(经过测试的)

    废话不多说了,直接上源码,一切尽在注解中:

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;

/**
 * Struts2文件下载功能实现
 * 
 * @author Echo
 * 
 */
public class DownloadAction extends ActionSupport implements
		ServletContextAware {
	/** 序列化 */
	private static final long serialVersionUID = 1L;
	/** 上下文环境,用于获取文件路径 */
	private ServletContext context;
	/** 文件名,可以动态指定 */
	private String filename = "wusuowei";
	/** 动态指定MIME类型 */
	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;
		}
	}

	public void setServletContext(ServletContext context) {
		this.context = context;
	}

}

struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="zyc" extends="struts-default" namespace="/">
		<action name="download" class="study.action.DownloadAction">
			<!-- 指定Action返回success下载流对象 -->
			<result type="stream" name="success">
				<!-- 文件类型,与Action中的mineType对映 -->
				<param name="contentType">${mimeType}</param>
				<!-- 指定文件的输入流对象,与Actiono中的InputStream对映   -->
				<param name="inputName">inStream</param>
				<!-- 文件名,与Action中对映 -->
				<param name="contentDisposition">attachment;filename="${filename}"</param>
				<!-- 指定缓冲区大小 -->
				<param name="bufferSize">1024</param>
			</result>
		</action>
	</package>
</struts>    
剩下的内容你懂得,把这个Action嵌套到JSP页面上点击就可以下载相应内容。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值