![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| smolnij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.5.2009 Репутация: нет Всего: нет |
Здравствуйте. Проблема такова: из С++ программы в request web - приложения приходит base64 кодированный pdf, большого размера(~150мб). Приложение работает под JBOSS и если просто читать request.getParameter("fileName") в строку, то вылетает по OutOfMemoryError. Приложение использует struts 1.3.8. Проблема состоит в том что я получаю файл из С++ программы внутрь реквеста, соответственно не могу использовать struts'овский FormFile, и т.п.
Более того, мудрые индусы присылают файл не в multipart/form-data, а в application/x-www-form-urlencoded, так что я не могу использовать commons file upload, чтобы получить этот файл. я пробовал перехватывать их реквест в фильтре, и оборачивать его в org.apache.struts.upload.MultipartRequestWrapper() (повторюсь, struts 1.3.8), но проверка для commons-file upload if (ServletFileUpload.isMultipartContent(request)) все равно дает false. Юзать com.oreily я тож не могу (лицензия не та). Я смотрел в исходники метода ServletFileUpload.isMultipartContent, он определяет просто по заголовку реквеста. Может, просто сменить заголовок? или реквест от этого мультипартом не станет? И еще, я прочитал, что все входящие переменные (как обычные, так и файловые) сохраняются либо в памяти либо на жестком диске сервера в зависимости от их размера. То есть теоретически, когда JBOSS получает в реквест большой параметр (base64 белиберда), он его сохраняет где-то на диске? А как он это сохраняет (под каким именем и где)? Может можно получить доступ к этому временному файлу? Может я сам туплю где-то... Я прочитал десяток веток на этом форуме по поводу file upload, но ни один пример не подошел. Там почти везде multipart, либо данные забираются с формы. А у меня тело pdf УЖЕ в request (загнанное в Base64), и надо как-то его принять и записать в файл. Подскажите пожалуйста, что можно сделать в таком случае. |
|||
|
||||
| smolnij |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.5.2009 Репутация: нет Всего: нет |
Делаю вот что:
Фильтр, фильтрует все реквесты.
Далее в коде проверяю
|
||||
|
|||||
| goodday1941 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 709 Регистрация: 16.7.2006 Где: Украина, Киев Репутация: нет Всего: 9 |
ServletRequest.java
скорее всего так можно достать... в стринг инфу перегонять нет смысла так как аутОфМемори обеспечен -------------------- SCJP 6 |
|||
|
||||
| smolnij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.5.2009 Репутация: нет Всего: нет |
Спасибо за ответ, попробовал.
Можно перегнать в двоичном виде весь реквест в файл. Но там в реквесте есть еще параметры... Можно их как-то повынимать, потом перегнать реквест в файл, а потом обратно положить? |
|||
|
||||
| goodday1941 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 709 Регистрация: 16.7.2006 Где: Украина, Киев Репутация: нет Всего: 9 |
ну тут надо ковырять...
отделить нужную инфу скорее всего можно по каким то признакам... теоретически Вам нужно буферно "почитывать" стрим и искать начало интересующей инфы... найдя начало начать записывать это дело куда-то (в файл скорее всего).. ну и далее почитывать почитывать до конца интересующей Вас инфы (эт тоже Вы должны определить что есть концом)... ну и в результате вы получите файл который вас интересует в общем хардкодинг дикий -------------------- SCJP 6 |
|||
|
||||
| smolnij |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 8.5.2009 Репутация: нет Всего: нет |
Спасибо. В принципе гугля дает варианты как удалить объект из реквеста. Думаю сначала вынуть все другие объекты из реквеста, потом прочитать все в файл, и положить все обратно (дальше по коду пригодится).
|
|||
|
||||
![]()
|
| Правила форума "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. |