使檔案下載的自訂串連支援 FlashGet 的斷點續傳多線程連結下載! JSP/Servlet 實現!

來源:互聯網
上載者:User
 <%
/*
  檔案名稱可存為: Download.jsp
  HTTP 協議的請求與響應的會話過程可通過使用 FlashGet 下載 Http:// 串連的過程監視:
  藍色部分為: 用戶端請求
  紫色部分為: 伺服器端響應
  :
  http://blog.csdn.net/images/blog_csdn_net/playyuer/30110/o_FlashGet.gif
  或參閱,後面的 FlashGet 會話列表:
  
*/
  //你可以使用你伺服器上的檔案及其路徑
  String s = "I://SetupRes//Sun//j2re-1_4_2_05-windows-i586-p.exe";
  //String s = "e://tree.mdb";

  //經測試 RandomAccessFile 也可以實現,有興趣可將注釋去掉,並注釋掉 FileInputStream 版本的語句
  //java.io.RandomAccessFile raf = new java.io.RandomAccessFile(s,"r");

  java.io.File f = new java.io.File(s);
  java.io.FileInputStream fis = new java.io.FileInputStream(f);

  response.reset();

  response.setHeader("Server", "playyuer@Microshaoft.com");

  //告訴用戶端允許斷點續傳多線程串連下載
  //響應的格式是:
  //Accept-Ranges: bytes
  response.setHeader("Accept-Ranges", "bytes");

  long p = 0;
  long l = 0;
  //l = raf.length();
  l = f.length();

  //如果是第一次下,還沒有斷點續傳,狀態是預設的 200,無需顯式設定
  //響應的格式是:
  //HTTP/1.1 200 OK

  if (request.getHeader("Range") != null) //用戶端請求的下載的檔案塊的開始位元組
  {
   //如果是下載檔案的範圍而不是全部,向用戶端聲明支援並開始檔案塊下載
   //要設定狀態
   //響應的格式是:
   //HTTP/1.1 206 Partial Content
   response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);//206

   //從請求中得到開始的位元組
   //請求的格式是:
   //Range: bytes=[檔案塊的開始位元組]-
   p = Long.parseLong(request.getHeader("Range").replaceAll("bytes=","").replaceAll("-",""));
  }

  //下載的檔案(或塊)長度
  //響應的格式是:
  //Content-Length: [檔案的總大小] - [用戶端請求的下載的檔案塊的開始位元組]
  response.setHeader("Content-Length", new Long(l - p).toString());

  if (p != 0)
  {
   //不是從最開始下載,
   //響應的格式是:
   //Content-Range: bytes [檔案塊的開始位元組]-[檔案的總大小 - 1]/[檔案的總大小]
   response.setHeader("Content-Range","bytes " + new Long(p).toString() + "-" + new Long(l -1).toString() + "/" + new Long(l).toString());
  }

  //response.setHeader("Connection", "Close"); //如果有此句話不能用 IE 直接下載

  //使用戶端直接下載
  //響應的格式是:
  //Content-Type: application/octet-stream
  response.setContentType("application/octet-stream");

  //為用戶端下載指定預設的下載檔案名稱
  //響應的格式是:
  //Content-Disposition: attachment;filename="[檔案名稱]"
  //response.setHeader("Content-Disposition", "attachment;filename=/"" + s.substring(s.lastIndexOf("//") + 1) + "/""); //經測試 RandomAccessFile 也可以實現,有興趣可將注釋去掉,並注釋掉 FileInputStream 版本的語句
  response.setHeader("Content-Disposition", "attachment;filename=/"" + f.getName() + "/"");

  //raf.seek(p);
  fis.skip(p);

  byte[] b = new byte[1024];
  int i;

  //while ( (i = raf.read(b)) != -1 ) //經測試 RandomAccessFile 也可以實現,有興趣可將注釋去掉,並注釋掉 FileInputStream 版本的語句
  while ( (i = fis.read(b)) != -1 )
  {
   response.getOutputStream().write(b,0,i);
  }
  //raf.close();//經測試 RandomAccessFile 也可以實現,有興趣可將注釋去掉,並注釋掉 FileInputStream 版本的語句
  fis.close();
%>

==========================================================================

在 FlashGet 中
一組第一次直接下載,還沒有斷點續傳 HTTP 會話過程:
用戶端請求:
Mon Aug 02 05:46:36 2004 正在串連 download2.flashfxp.com:80
Mon Aug 02 05:46:36 2004 正在串連 download2.flashfxp.com [IP=66.98.228.125:80]
Mon Aug 02 05:46:37 2004 已串連.
Mon Aug 02 05:46:37 2004 GET /zip/FlashFXP_30_Setup.exe HTTP/1.1
Mon Aug 02 05:46:37 2004 Host: download2.flashfxp.com
Mon Aug 02 05:46:37 2004 Accept: */*
Mon Aug 02 05:46:37 2004 Referer: http://playyuer.microshaoft.com
Mon Aug 02 05:46:37 2004 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Mon Aug 02 05:46:37 2004 Pragma: no-cache
Mon Aug 02 05:46:37 2004 Cache-Control: no-cache
Mon Aug 02 05:46:37 2004 Authorization: Basic MGRheTpjY2ZfZG93bmxvYWQ=
Mon Aug 02 05:46:37 2004 Connection: close

伺服器端響應:
Mon Aug 02 05:46:37 2004 HTTP/1.1 200 OK
Mon Aug 02 05:46:37 2004 Date: Sun, 01 Aug 2004 21:46:29 GMT
Mon Aug 02 05:46:37 2004 Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux) mod_fastcgi/2.2.12 mod_gzip/1.3.19.1a mod_jk/1.2.0 mod_perl/1.26 PHP/4.3.3 FrontPage/5.0.2 mod_ssl/2.8.12 OpenSSL/0.9.6b
Mon Aug 02 05:46:37 2004 Last-Modified: Fri, 30 Jul 2004 18:41:18 GMT
Mon Aug 02 05:46:37 2004 ETag: "4f80fa-1ecf20-410a964e"
Mon Aug 02 05:46:37 2004 Accept-Ranges: bytes
Mon Aug 02 05:46:37 2004 Content-Length: 2019104
Mon Aug 02 05:46:37 2004 Connection: close
Mon Aug 02 05:46:37 2004 Content-Type: application/octet-stream

 

一組斷點續傳的 HTTP 會話過程:
用戶端請求:
Mon Aug 02 05:27:05 2004 正在串連 download2.flashfxp.com:80
Mon Aug 02 05:27:05 2004 正在串連 download2.flashfxp.com [IP=66.98.228.125:80]
Mon Aug 02 05:27:05 2004 已串連.
Mon Aug 02 05:27:05 2004 GET /zip/FlashFXP_30_Setup.exe HTTP/1.1
Mon Aug 02 05:27:05 2004 Host: download2.flashfxp.com
Mon Aug 02 05:27:05 2004 Accept: */*
Mon Aug 02 05:27:05 2004 Referer: http://playyuer.microshaoft.com
Mon Aug 02 05:27:05 2004 User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)
Mon Aug 02 05:27:05 2004 Range: bytes=191621-
Mon Aug 02 05:27:05 2004 Pragma: no-cache
Mon Aug 02 05:27:05 2004 Cache-Control: no-cache
Mon Aug 02 05:27:05 2004 Authorization: Basic MGRheTpjY2ZfZG93bmxvYWQ=
Mon Aug 02 05:27:05 2004 Connection: close

伺服器端響應:
Mon Aug 02 05:27:06 2004 HTTP/1.1 206 Partial Content
Mon Aug 02 05:27:06 2004 Date: Sun, 01 Aug 2004 21:26:57 GMT
Mon Aug 02 05:27:06 2004 Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux) mod_fastcgi/2.2.12 mod_gzip/1.3.19.1a mod_jk/1.2.0 mod_perl/1.26 PHP/4.3.3 FrontPage/5.0.2 mod_ssl/2.8.12 OpenSSL/0.9.6b
Mon Aug 02 05:27:06 2004 Last-Modified: Fri, 30 Jul 2004 18:41:18 GMT
Mon Aug 02 05:27:06 2004 ETag: "4f80fa-1ecf20-410a964e"
Mon Aug 02 05:27:06 2004 Accept-Ranges: bytes
Mon Aug 02 05:27:06 2004 Content-Length: 1827483
Mon Aug 02 05:27:06 2004 Content-Range: bytes 191621-2019103/2019104
Mon Aug 02 05:27:06 2004 Connection: close
Mon Aug 02 05:27:06 2004 Content-Type: application/octet-stream

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.