кот 6.Как HttpServletResponse заставляет браузеры реагировать немедленно, не выполнив response.getOutputStream (). Close () ?? - PullRequest
0 голосов
/ 21 июня 2011

Это код моего сервлета:

while( bytes....){//do read file to bytes
    response.getOutputStream().write(bytes);
    response.getOutputStream().flush();
    log4j.debug(response.isCommitted());  // out  true.
}

Если мой файл имеет размер 100 МБ, сервер должен прочитать 100 МБ в память, а затем браузер выдаст предупреждение диалог загрузки файла. Как страшно время ожидания браузера, когда у меня файл gt чем 2 ГБ ....

1 Ответ

1 голос
/ 31 июля 2011

Проблемы совместимости с браузерами, из сервлетов Best Practices, часть 3 автором O'Reilly Java

Плохая новость заключается в том, что хотя спецификация HTTP предоставляет механизм загрузки файлов (см. HTTP / 1.1, раздел 19.5.1), многие браузеры подсчитывают директивы сервера и делают то, что думают лучше, чем то, что им говорят.

Хорошей новостью является то, что правильная комбинация заголовков загрузит файлы достаточно хорошо, чтобы быть практичным. С этими специальными заголовками, совместимый браузер откроет диалоговое окно «Сохранить как», а несовместимое браузер откроет диалоговое окно для всего контента, кроме HTML или изображения файлы.

установить заголовок Content-Type на нестандартное значение, такое как application/x-download.

...