JSP下載txt 和 Excel兩種文件
最近做了個(gè)用jsp下載的頁(yè)面 將代碼貼出來(lái) 權(quán)作記錄吧
1 下載txt文件
這個(gè)花了我不少時(shí)間 原因是用ie下載txt文件時(shí)是在頁(yè)面中直接打開(kāi)了文件.雖然查了一些資料,也看了別人的解決方案,可還是解決不了問(wèn)題,最后發(fā)現(xiàn)是一個(gè)字母惹的禍:少寫(xiě)一個(gè)字母 嘿嘿 夠馬虎!!!
代碼如下:
OutputStream o=response.getOutputStream();
byte b[]=new byte[500];
File fileLoad=new File("e:/test.txt");
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment; filename=text.txt");
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);
}
in.close();
out.clear();
out = pageContext.pushBody();
2 下載excel文件
跟下載txt文件時(shí)的唯一區(qū)別是ContentType值的設(shè)置不同:
OutputStream o=response.getOutputStream();
byte b[]=new byte[500];
File fileLoad=new File("e:/text.xls");
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-disposition","attachment; filename=text.xls");
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);
}
in.close();
out.clear();
out = pageContext.pushBody();
這兩個(gè)本來(lái)是放在一起的,因?yàn)槲业捻?yè)面中需要判斷是下載的txt文件還是xls文件 在這里給分開(kāi)了 需要注意的是,最后兩句一定要加上,否則會(huì)出現(xiàn)getOutputStream()錯(cuò)誤的!!!!
實(shí)例:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<script type="text/javascript">
function download(filename){
var url = encodeURI("down2.jsp?filename="+filename);
window.location.href= url;
}
</script>
</head>
<body>
普通測(cè)試:
<a href="javascript:void(0)" onclick="download('a.txt');">Down a.txt</a>
中文文件名測(cè)試:
<a href="javascript:void(0)" onclick="download('中文.txt');">Down 中文.txt</a>
普通轉(zhuǎn)向:
<a href="a.txt">down.txt</a>
</body>
</html>
down2.jsp:
<%@ page language="java" import="java.util.*,java.io.* " pageEncoding="UTF-8"%>
<%
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];
/** * 得到文件的當(dāng)前路徑 * @param args */
String serverpath=request.getRealPath("\\");
File fileLoad=new File(serverpath+filename);
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment; filename="+filename);
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);
}
in.close();
out.clear();
out = pageContext.pushBody();
%>
posted on 2011-12-21 10:53 wyx 閱讀(4832) 評(píng)論(0) 編輯 收藏