Я пытаюсь отправить файл пользователю из сервлета http.
Сервлет выполняет некоторые тесты идентификации (по запросу), а затем отправляет клиенту файл.
Обычно это работает, но теперь я включил перенаправление моего сервера TOMCAT на https, и когда я пытаюсь получить доступ к сервлету и загрузить файл из IE6 или IE8, происходит сбой, и я получаю следующее исключение:
java.lang.IllegalStateException: Cannot forward after response has been committed
(на localhost.log)
и
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
(в журнале сервлетов)
Код, который выполняет отправку (упрощенно):
private void sendFile(HttpServletResponse response, byte[] file, String clientFileName)
{
ServletOutputStream op = null;
setContentType(response);
response.setHeader("Content-Disposition", "attachment; filename=\"" + clientFileName + "\"");
// send byte array to output buffer.
op = response.getOutputStream();
// Content Length must be set after all processing done.
response.setContentLength((int) file.length);
op.write(file);
}
Это правильный способ отправки файла из сервлета? Какой лучший способ?
Спасибо !!
UPDATE
Использовал код из @BalusC artice по этой ссылке:
http://balusc.blogspot.com/2007/07/fileservlet.html
Это заставило его работать.
По-прежнему не работает в IE6-IE8 при использовании из Gmail из-за стадии фильтрации, которую gmail добавляет к загрузкам в этих браузерах.
ОБНОВЛЕНИЕ 2
Кажется, проблема в Gmail + Internet Explorer 6-8.
Я предполагаю, что gmail выполняет редирект (это на самом деле довольно очевидно, если вы посмотрите на URL на странице после того, как нажмете ссылку в письме).
Является ли метод Client-Pull моим единственным решением?