溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.com/sxyx2008/謝謝合作!!!

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks
          package com.future.zfs.util;

          import java.io.BufferedInputStream;
          import java.io.BufferedOutputStream;
          import java.io.File;
          import java.io.FileInputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.OutputStream;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          @SuppressWarnings(
          "serial")
          public class FileDownLoadServlet extends HttpServlet{
              
              @Override
              
          protected void service(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {
                  String path
          =request.getParameter("filename");
                  path
          =new String(path.getBytes("ISO-8859-1"),"utf-8");
                  download(path,request,response);
              }
              
              @SuppressWarnings(
          "deprecation")
              
          public HttpServletResponse download(String path,HttpServletRequest request, HttpServletResponse response) {
                  
          try {
                      
          // path是指欲下載的文件的路徑。
                      File file = new File(request.getRealPath("/")+"/"+path);
                      
          // 取得文件名。
                      String filename = file.getName();
                      
          // 取得文件的后綴名。
                      
          //String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();

                      
          // 以流的形式下載文件。
                      InputStream fis = new BufferedInputStream(new FileInputStream(file));
                      
          byte[] buffer = new byte[fis.available()];
                      fis.read(buffer);
                      fis.close();
                      
          // 清空response
                      response.reset();
                      
          // 設置response的Header
                      response.addHeader("Content-Disposition""attachment;filename=" + new String(filename.getBytes("utf-8"),"ISO-8859-1"));
                      response.addHeader(
          "Content-Length""" + file.length());
                      OutputStream toClient 
          = new BufferedOutputStream(response.getOutputStream());
                      response.setContentType(
          "application/octet-stream");
                      toClient.write(buffer);
                      toClient.flush();
                      toClient.close();
                  } 
          catch (IOException ex) {
                      ex.printStackTrace();
                  }
                  
          return response;
              }
          }
          web.xml
          <servlet>
                  
          <servlet-name>fileDownLoadServlet</servlet-name>
                  
          <servlet-class>com.future.zfs.util.FileDownLoadServlet</servlet-class>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>fileDownLoadServlet</servlet-name>
                  
          <url-pattern>/fileDownLoadServlet</url-pattern>
              
          </servlet-mapping>
          <href="fileDownLoadServlet?filename=通訊錄.xls">哈哈,測試文件下載</a>
          posted on 2010-12-10 17:21 雪山飛鵠 閱讀(21742) 評論(9)  編輯  收藏 所屬分類: javase

          Feedback

          # re: 基于servlet的文件下載 2010-12-14 11:15 雪落無聲
          不錯,收藏了  回復  更多評論
            

          # re: 基于servlet的文件下載 2011-12-02 15:47 www
          @雪落無聲
          請問你的那個path是指文件在服務器的存儲路徑嗎
            回復  更多評論
            

          # re: 基于servlet的文件下載 2012-09-21 17:04 Laura
          不能指定 下載的路徑  回復  更多評論
            

          # re: 基于servlet的文件下載 2013-01-22 09:13 donny
          很不錯。根據你寫的我改了一改。就能指定下載路徑了。感謝  回復  更多評論
            

          # re: 基于servlet的文件下載 2013-05-20 16:13 gelingolf
          寫的不錯,學習
          www.gelingolf.com  回復  更多評論
            

          # re: 基于servlet的文件下載 2013-06-08 13:37 kzt
          文件大的話豈不是就不行了  回復  更多評論
            

          # re: 基于servlet的文件下載 2013-06-25 20:59 EasonHaha
          inputStream.avaliable()不安全吧,還是byte數組循環文檔些  回復  更多評論
            

          # re: 基于servlet的文件下載 2013-10-28 20:49 pecan
          沒錯@EasonHaha,這個方法已經導致我的程序溢出了。。  回復  更多評論
            

          # re: 基于servlet的文件下載 2014-10-31 15:59 lyle
          深圳java群 397083120 找工作,討論技術,交朋友  回復  更多評論
            

          主站蜘蛛池模板: 石门县| 苏州市| 克东县| 拉萨市| 横山县| 安陆市| 镇赉县| 灵川县| 岑溪市| 潢川县| 牡丹江市| 襄垣县| 邻水| 本溪市| 固阳县| 凤冈县| 成安县| 周宁县| 曲靖市| 油尖旺区| 星子县| 宕昌县| 娱乐| 万荣县| 嵊泗县| 东阿县| 岳阳县| 瑞昌市| 牡丹江市| 杂多县| 西乌| 纳雍县| 卢氏县| 天气| 蒙阴县| 朔州市| 宜宾县| 东宁县| 青龙| 虹口区| 静宁县|