Скачать файл через HTTPS - PullRequest
       1

Скачать файл через HTTPS

1 голос
/ 01 ноября 2011

Я нахожусь в проекте, который должен загрузить файл размером около 10M с сервера. И я использую прямой URL (https://serveraddress:port/filepath), чтобы загрузить его. Firefox и IE9 в порядке, но IE8 нет. Я искал подобный случай здесь, и кажется, что что-то не так с настройкой cookie.

Итак, я добавил следующее:

в заголовке файла xhtml, но я обнаружил, что заголовок ответа по-прежнему такой:

Pragma No-cache Cache-Control 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 голосов
/ 01 ноября 2011

Я думаю, что это ошибка IE, попробуйте Google по ключевым словам "IE загрузка файла https cache pragma".Есть несколько статей об этом, например: http://mark.koli.ch/2009/10/internet-explorer-cant-open-file-via-https-try-removing-the-pragma-header.html, http://support.microsoft.com/kb/323308

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...