jsp下载的几种方式:1、运用struts的下载类DownloadAction 2、直接流化

1、第一种使用struts下载比较简单。需要继承DownloadAction。然后重写getStreamInfo方法。把InputStream流放入内部类中就行了。

package cn.finefuture.common.faxserver.struts;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;
import cn.finefuture.common.faxserver.service.FaxServerService;
import cn.finefuture.common.faxserver.service.impl.FaxServerServiceImp;
public class FaxDownAction extends DownloadAction {
	private FaxServerService faxServerService = new FaxServerServiceImp();
	public void setFaxServerService(FaxServerService faxServerService) {
		this.faxServerService = faxServerService;
	}
	@Override
	protected StreamInfo getStreamInfo(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// 传真编号
		String faxId = request.getParameter("faxId");
		InputStream inStream = null;
		if (faxId != null && !(faxId.equals(""))) {
			//获取InputStream
			inStream = this.faxServerService.getFaxInAtt(faxId);
		}
		final InputStream in = inStream;
		final String contentType = "application/file";
		// 建<mce:script type="text/javascript" src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.youkuaiyun.com/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>议设置content-disposition响应信息头,否则Web浏览器在下载文件时
		// 无法在保存文件对话框中显示正确的文件名
		response.setHeader("content-disposition", "attachment; filename="
				+ faxId);
		return new DownloadAction.StreamInfo() // 使用隐式的方法实现了StreamInfo接口
		{
			public String getContentType() {
				return contentType;
			}
			public InputStream getInputStream() throws IOException {
				return in;
			}
		};
	}
	// 如果Struts动作不加file请求参数,则通过execute方法将指定目录中文件列表输出到客户端
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// 当file参数存在时,则调用DownloadAction中的execute方法
		// 实际上,在DownloadAction类中的execute方法调用了getStreamInfo方法
		// 这条语句就相当于调用了getStreamInfo方法
		return super.execute(mapping, form, request, response);
	}
}

2、第二种自己写输出流

/**
	 * 下载附件
	 * 
	 * @param mapping
	 * @param form
	 * @param request
	 * @param response
	 * @return
	 */
	public ActionForward doDownLoadAttachment(ActionMapping mapping,
			ActionForm form, HttpServletRequest request,
			HttpServletResponse response) {
		// 传真编号
		String faxId = request.getParameter("faxId");
		InputStream inStream = null;
		if (faxId != null && !(faxId.equals(""))) {
			inStream = this.faxServerService.getFaxInAtt(faxId);
		}
		// 流不等于null
		if (inStream != null) {
			try {
				// 设置输出的格式
				response.reset();
				response.setContentType("bin");
				// 给中文字符转码
				faxId = new String(faxId.getBytes("GBK"), "iso8859-1");
				// 设置文件名
				response.setHeader("Content-Disposition",
						"attachment;filename=" + faxId);
				// 循环取出流中的数据
				byte[] b = new byte[1024];
				int len;
				while ((len = inStream.read(b)) > 0) {
					response.getOutputStream().write(b, 0, len);
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				try {
					inStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return null;
	}

转载于:https://my.oschina.net/u/1159401/blog/309924

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值