![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| gelo86 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 388 Регистрация: 26.10.2007 Репутация: нет Всего: нет |
Добрый вечер. У меня есть сервис каторий генерируэт пдф и записываэт его прама в OutputStream. Этот пдф будет скачан через бровзер (download). Знаю, что бивает что скачаеш пдф а открит не можеш (пишет что broken document - adobe reader). Если перед записю в OutputStream запишеш сколко занемает скачеваемый фаил, то все работает. У меня ситуация такая, что я генерирую на лету фаил дла скачки и сразу записаваю в OutputStream (если сначала в масив баитов то палучаю out of memore error). Как узнать, сколко же баитов било записано в os, после визова myServiceObject,generatePDF(os);.
|
|||
|
||||
| necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
1. можно увеличить размер памяти под JVM
2. можно попробовать проставить размер больший и статичный 3. можно попробовать проставить размер -1 4. можно файл писать на диск, а затем отдавать пользователю. выставлять ContentLength необходимо перед отдачей данных в поток. -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Наверняка вы используете стандартный веб контейнер (Томкат , например), и проблема скорее всего в том, что вы что-то лишнее делаете.
Если заранее обьем респонса не известен (как раз ваш случай), то согласно протоколу http 1.1 (определяется контейнером из запроса) контейнер будет использовать chunked режим, а в http 1.0 конец данных определяется закрытием соединения. В обоих случаях не надо использовать setContentLength (..). Также и закрывать соединение не обязательно - контейнер сам сделает. |
|||
|
||||
| necromancer |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 317 Регистрация: 26.7.2006 Где: Москва Репутация: 6 Всего: 7 |
to COVD:
ну получит клиент 30кб вместо 30Мб и будет думать что все прошло отлично и сохраненный кусок полный. -------------------- С уважением, Виталий Смык ---------------------------------------------------------------------------------------------- SCJP, SCWCD, OCA http://dev.maryno.net/video/ |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
так для того и протокол, чтобы не "думать". |
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: 2 Всего: 7 |
COVD,
не соглачен ) HTTP протокол достаточно ненадежный. Если хочется проверить что до клиента дошло все как надо, то лучше проверять длину/контрольную сумму. ИМХО конечно. -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Возможно, ненадежно, когда конец данных определяется разрывом соединения - соединение может быть аварийно разорвано в середине данных. Но этот способ применялся в HTTP 1.0. В версии 1.1 используется chunked - сервер отправляет данные порциями, и перед каждой порцией высылает ее размер. Вроде надежней некуда. Если не ошибаюсь, сервлеты "заточены" под динамические данные и автоматом используют "chunked". Не говоря о том, что новомодные технологии ajax , comet базируются на chunked. Это сообщение отредактировал(а) COVD - 12.12.2008, 17:21 |
|||
|
||||
| Tony |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1159 Регистрация: 3.3.2006 Где: Riga Репутация: 6 Всего: 12 |
Зака4ай в ByteArrayOutputStream out, потом посмотри size(), и затетм out.writeTo(servletOutputStrem)
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |