2011-11-01 217 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

回答