當(dāng)幸福來(lái)敲門

          我就會(huì)牢牢抓住!
          隨筆 - 50, 文章 - 3, 評(píng)論 - 8, 引用 - 0
          數(shù)據(jù)加載中……

          JSP下載txt 和 Excel兩種文件

          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)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 金溪县| 四平市| 临桂县| 桑植县| 福建省| 涡阳县| 定日县| 全州县| 富宁县| 吴忠市| 清水县| 钦州市| 长汀县| 郯城县| 汾西县| 仁寿县| 阿拉善左旗| 宝丰县| 肃北| 新乡市| 九寨沟县| 姜堰市| 江陵县| 西宁市| 朝阳县| 平顶山市| 普兰店市| 涟水县| 静安区| 绩溪县| 上饶市| 盐城市| 武宁县| 福州市| 东乌珠穆沁旗| 安陆市| 绥滨县| 桐柏县| 调兵山市| 宜都市| 静宁县|