2011-11-01 333 views
1

我是一個需要從服務器上下載一個大約10M大小的文件的項目。 我使用直接鏈接(https://開頭serveraddress:端口/文件路徑)下載。 Firefox和IE9是好的,但IE8沒有。 我在這裏搜索了類似的案例,似乎cookie設置有問題。下載文件通過HTTPS

因此,我增加了以下內容:

在XHTML文件的頭部

,但我發現響應頭仍然如下:

語用無緩存 緩存控制無緩存

,然後我添加以下內容: response.setHeader( 「緩存控制」, 「私人」); response.setHeader( 「附註」, 「公共」); response.setHeader(「Expires」,「-1」);

在JSP文件

,並使用的BufferedInputStream和的BufferedOutputStream讀取和寫入文件,但它仍然無法正常工作,它重定向到debug.xhtml頁面

任何人都可以幫忙嗎?

整個JSP文件是:

 final int DEFAULT_BUFFER_SIZE = 10240; 
try { 
    String fileName = request.getPathInfo(); 
    File fileToDownload = new File(request.getSession().getServletContext().getRealPath("/")+ "installer/" + fileName); 

    if(!fileToDownload.exists()){ 
     response.sendError(HttpServletResponse.SC_NOT_FOUND); // 404. 
     return; 
    } 
    response.setHeader("Cache-Control", "private"); 
    response.setHeader("Pragma", "public"); 
    response.setHeader("Expires", "-1"); 

    response.setHeader("Content-Disposition","attachment; filename=\"" + fileToDownload.getName()+"\""); 
    response.setBufferSize(DEFAULT_BUFFER_SIZE); 
    String contentType = getServletContext().getMimeType(fileToDownload.getName()); 

    if (contentType == null) { 
     contentType = "application/octet-stream"; 
    } 
    response.setHeader("contentType", contentType); 

    response.setHeader("Content-Length", String.valueOf(fileToDownload.length())); 

    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 

    try { 
     input = new BufferedInputStream(new FileInputStream(
       fileToDownload), DEFAULT_BUFFER_SIZE); 
     output = new BufferedOutputStream(response 
       .getOutputStream(), DEFAULT_BUFFER_SIZE); 
     byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
     int length; 
     int index = 1; 
     while ((length = input.read(buffer)) > 0) { 
      output.write(buffer, 0, length); 
     } 
    } finally { 
     output.close(); 
     input.close(); 
    } 
    System.out.println("finish"); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

請定義「不好」。什麼是「不好」? – deceze

+0

這只是意味着不工作,我不能用IE8下載文件 – PhoenixCA

+1

那麼,IE8中發生了什麼*而不是? – deceze

回答