загрузка листа Excel из ответа сервлета - PullRequest
0 голосов
/ 02 сентября 2010

Я пытаюсь загрузить лист Excel из ответа сервлета.

Когда я нажимаю на ссылку, которая отправляет запрос на сервер для возврата листа Excel, сохранить / сохранить, как диалоговое окно открывается с просьбой сохранить Excelпростынь.Это ожидаемое поведение.

Но если я попытаюсь использовать IE 6 или более новую версию, то после нажатия на ссылку открывается новое окно.А затем открывается диалоговое окно «Сохранить / Сохранить как».

Другие операции выполняются, как и ожидалось, но проблема в том, что в новом окне отображается сообщение Не удается открыть страницу.Кстати, я могу избежать открытия этого нового окна?

Я хочу, чтобы диалоговое окно Сохранить / Сохранить как напрямую отображалось в том же окне, из которого была нажата ссылка.

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Если вы хотите отправить ответ от сервлета (или фактически любого веб-приложения), который должен рассматриваться как загрузка, вы можете сделать это, указав правильное расположение контента (вы можете даже указать имя файла независимо отURI):

HttpServletResponse res = ...
/*
 * set headers
 */
res.setContentType("application/vnd.ms-excel");
res.setHeader("Content-Disposition", "attached; filename=my-workbook.xls");
/*
* pass the download to the response
*/
try {
    OutputStream out = res.getOutputStream();
    InputStream in = this.download.getInputStream();
    byte[] buffer = new byte[res.getBufferSize()];
    int available = in.read(buffer);
    while (available > 0) {
        out.write(buffer, 0, available);
        available = in.read(buffer);
    }
    in.close();
    out.flush();
    out.close();
} catch (IOException e) {
    // handle exception
}
0 голосов
/ 02 сентября 2010

Я видел, как новое окно открывалось много раз, но в нем никогда не было ошибок.

Попробуйте запустить загрузку в IFrame. Если сама загрузка все еще запускается, это может помочь скрыть сообщение об ошибке. Было бы лучше выяснить, почему отображается ошибка, и остановить ее, но если это не удастся, вы, по крайней мере, сможете скрыть ее от пользователя.

Хотя раньше я видел, как IE делает странные вещи с ошибками в IFrames (время от времени это происходит), но я думаю, что это было связано только с нестандартными обработчиками протокола, а не с ошибками HTTP.

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