2010-12-28 5 views
3

Я не нашел никаких указаний в Spring documentation, что он поддерживает чтение файлов в потоковом режиме в своем объекте MultipartHttpServletRequest, которые обрабатывают множественные запросы.

аналогичным образом, что возможно в Apache Commons framework.

Поддерживается ли это весной?Поддерживает ли Spring Framework режим потоковой передачи в многопользовательских запросах

+0

Что вы подразумеваете под «потоковым режимом»? – skaffman

+0

Я имею в виду, что запрос не отправляется полностью на сервер, когда приложение хочет читать файлы, вместо этого сервер может контролировать запрос и читать его файлы один за другим. Чтобы иметь возможность обрабатывать запросы с очень большим размером – Spiderman

+0

Вам нужно будет пересмотреть вопрос о загрузке стратегии большого файла. Возможно, вам придется написать клиент, который разбивает большой файл и сервлет, который объединяет их после получения всех фрагментов. BTW, сервер никогда не сможет контролировать запрос. Он должен полностью принять запрос независимо от того, что (даже если кто-то пытается атаковать его). – gigadot

ответ

1

Да, посмотрите here. Ваш Spring API слишком стар. Кроме того, режим Streaming не имеет ничего общего с Spring. Это возможность вашего контейнера сервлетов или вашего сервера. Большинство серверов теперь поддерживают режим потоковой передачи. Сервлет начнет выполнение запроса, как только он получит заголовок из вашего запроса. Вы можете продолжать отправлять поток своего тела запроса (например, многостраничные данные). Однако синтаксический анализ может выполняться полностью только при полном отправке запроса. Это то же самое, что и Apache Common FileUpload.

В качестве альтернативы вы можете написать контроллер с использованием аннотации Spring. Spring добавит значение ServletRequest, если вы добавите это как один из ваших действий по управлению контроллером. После этого вы можете использовать Apache FileUpload для многопараметрического разбора.

Вы не можете проводить выборочный синтаксический анализ, так как запрос должен быть полностью отправлен серверу независимо от того, что. Это предел Http. Несколько дней назад я спросил question.

+0

Я не думаю, что запрос ДОЛЖЕН быть полностью отправлен на сервер. См. Мой ответ здесь: http://stackoverflow.com/questions/1836760/is-there-a-way-to-get-raw-http-request-stream-from-java-servlet-handler/4552280#4552280 – Spiderman

+0

@ Человек-паук Я не вижу никаких объяснений в вашем посте. Причина, по которой я сказал, потому что я экспериментировал с ней с помощью отладчика. Поток сервлета запускается, даже если поток не был полностью отправлен, но заголовки имеют. API FileUpload начинает чтение потока и записывает его во временные файлы. Прежде чем выполнить следующую команду, поток должен быть полностью получен. В противном случае FileUpload выкинет исключение и удалит ранее загруженные данные. – gigadot

+0

Я делал опыт, используя простой HTTPServletRequest, а не какую-либо Spring-упаковку, которая расширяет ее. Я проверил с помощью HTTP-анализатора и пришел к выводу, что до тех пор, пока я не читал поток запроса, клиентская сторона не отправляла данные на серверную сторону, поэтому я, как программист приложений, работающий на веб-сервере, может контроль доставки HTTP-запроса – Spiderman