2013-05-09 46 views
0

Downloading a file from spring controllers下載從春天控制器文件與簡歷支持

以上是原創文章,但我希望有恢復的支持,意味着我可以dowmload 51%1,然後在其他時間下載其他49%。

環境的Tomcat 7.0.39

我嘗試了一些,但還是失敗了。

這裏是我的代碼,或者你可以分享你的代碼

  InputStream fis =new FileInputStream(filepath+file_name); 

      response.setHeader("Accept-Ranges", "bytes"); 
      long length = (int) new File(filepath+file_name).length(); 
      long start = 0; 

      if (request.getHeader("Range") != null) 
      { 
       response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);// 206 
       start = Long.parseLong(request.getHeader("Range") 
         .replaceAll("bytes=", "").replaceAll("-", "")); 
      } 

      response.setHeader("Content-Length", new Long(length - start).toString()); 
      if (start != 0) 
      { 
       response.setHeader("Content-Range", "bytes " 
         + new Long(start).toString() + "-" 
         + new Long(length - 1).toString() + "/" 
         + new Long(length).toString()); 
      } 

      response.setContentType("application/octet-stream"); 

      fis.skip(start); 
      byte[] b = new byte[1024]; 
      int i; 
      while ((i = fis.read(b)) != -1) { 
       response.getOutputStream().write(b, 0, i); 
       response.flushBuffer(); 
      } 
      fis.close(); 

固定的,這是我的編輯版本

long length = (int) new File(filepath+file_name).length(); 
       long start = 0; 
       response.setHeader("Accept-Ranges", "bytes"); 
       response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);// 206 
       if (request.getHeader("Range") != null) 
       { 
        int x = request.getHeader("Range").indexOf("-"); 
        start = Long.parseLong(request.getHeader("Range").substring(0, x) 
          .replaceAll("bytes=", "")); 
       } 
       response.setHeader("Content-Length", new Long(length - start).toString()); 

       if(start == 0) 
        response.setHeader("Content-Range", "bytes 0-"  +new Long(length - 1).toString()+"/"+length); 
       else 
        response.setHeader("Content-Range", "bytes "+start+"-"+new Long(length - 1).toString()+"/"+length); 
       fis.skip(start); 
       byte[] b = new byte[1024]; 
       int i; 
       while ((i = fis.read(b)) != -1) { 
        response.getOutputStream().write(b, 0, i); 
        response.flushBuffer(); 
       } 
       fis.close(); 
+0

失敗,什麼樣的錯誤/異常的Spring應用程序裏面? – 2013-05-09 04:16:33

+0

java.io.IOException – Stupidfrog 2013-05-09 05:49:37

回答