下载excel、压缩包等

java后台实现下载图片等,用io很容易实现,不太容易出现乱码,但是通过http响应,在浏览器上下载到用户的客户端,用out下载的话,报头设置不对很容易出现乱码;

下载其他文件都是类似;

 

压缩包下载

<%@ page language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.net.*"%>
<%
	String fileName = request.getParameter("filename");
	response.setHeader("Content-Type", "application/zip");
	response.setHeader("Content-disposition",
			"attachment; filename="+fileName+".zip");
	java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
			request.getRealPath("/tempimg/"+fileName+".zip"));
	int i;
	while ((i = fileInputStream.read()) != -1) {
		out.write(i);
	}
	fileInputStream.close();
%>


 

excel下载

<%@ page language="java"%>
<%@ page contentType="application/msexcel;charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="java.util.*"%>
<%@ page import="java.text.*"%>
<%@ page import="java.net.*"%>

<%@ page import="java.io.*"%>

<%



	request.setCharacterEncoding("utf-8");
	String filename = request.getParameter("filename");
	filename = new String(filename.getBytes("ISO-8859-1"),"UTF-8"); 
	System.out.println(filename);
	OutputStream o=response.getOutputStream();
	byte b[]=new byte[500];
	/** * 得到文件的当前路径 * @param args */ 
	//String serverpath=request.getRealPath("\\"); 
	File fileLoad=new File(request.getRealPath("/tempimg/"+filename+".xls"));
	response.setContentType("application/octet-stream");
<span style="background-color: rgb(255, 255, 51);">//application/vnd.ms-excel也可以,参考</span><a target=_blank href="http://tool.oschina.net/commons"><span style="background-color: rgb(255, 255, 51);">http://tool.oschina.net/commons</span></a><span style="background-color: rgb(255, 255, 51);">(HTTP Content-type对照表)</span>
 	response.setHeader("content-disposition","attachment; filename="+filename+".xls");
<span style="background-color: rgb(255, 255, 51);">//提示下载,如果把filename去掉,也会正常下载,仅仅是指定默认保存的文件名;但是content-disposition不能缺少</span>
	long fileLength=fileLoad.length();
	String length1=String.valueOf(fileLength);
	response.setHeader("Content_Length",length1);
	FileInputStream in=new FileInputStream(fileLoad);
	int n;
	while((n=in.read(b))!=-1){
	   o.write(b,0,n);
	}
	System.out.println("wanleewan");
	in.close();
	out.clear();
	<span style="color:#ff0000;background-color: rgb(255, 255, 51);">out = pageContext.pushBody();
</span>
<span style="color:#ff0000;background-color: rgb(255, 255, 51);">//不加有时候会报错</span>




			
	
	/* //输入流			
	java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
			request.getRealPath("/tempimg/"+fileName+".xls"));
	FileOutputStream fileOutputStream = new FileOutputStream("G:\\log.xls",true);	
	int i;
	while ((i = fileInputStream.read()) != -1) {
		//out.write(i);
		fileOutputStream.write(i);
	}
	System.out.println("输出完了");
	fileOutputStream.close();
	fileInputStream.close(); */
	
	
	
	
	//不行!!!还是用字节流可行
	/* //输入流			
	FileReader reader=new FileReader(request.getRealPath("/tempimg/"+fileName+".xls"));
	PrintWriter writer=new PrintWriter("G:\\log2.xls");
	int i;
	while ((i = reader.read()) != -1) {
		//out.write(i);
		writer.write(i);
	}
	System.out.println("输出完了");
	reader.close();
	writer.close(); */
	
	
%>	




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值