通过HTTPS下载文件

时间:2011-11-01 09:18:14

标签: java xhtml

我所在的项目需要从服务器下载大小约为10M的文件。 我使用直接URL(https:// serveraddress:port / filepath)来下载它。 firefox和IE9还可以,但IE8没有。 我在这里搜索了类似的案例,似乎cookie设置有问题。

所以我添加了以下内容:

在xhtml文件的头部,但我发现响应头仍然如下:

Pragma No-cache 缓存控制无缓存

然后我添加以下内容:         response.setHeader(“Cache-Control”,“private”);         response.setHeader(“Pragma”,“public”);         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();
}

1 个答案:

答案 0 :(得分:0)

我认为这是IE漏洞,请通过关键字“IE文件下载https缓存pragma”尝试Google。有一些关于它的文章,例如:http://mark.koli.ch/2009/10/internet-explorer-cant-open-file-via-https-try-removing-the-pragma-header.htmlhttp://support.microsoft.com/kb/323308