исключение при разборе данных многостраничной формы

Я пытаюсь обработать загрузку файла и использую класс com.oreilly.servlet.multipart.MultipartParser для анализа опубликованных данных (в cos.jar). Однако, когда я вызываю конструктор MultipartParser, я получаю следующее исключение:

java.io.IOException: Corrupt form data: premature ending
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:94)

Кто-нибудь видел это раньше? Из того, что я прочитал, это означает, что данные закончились до того, как нашли границу, которую искали. Как я могу это исправить?

Я использую cos.jar версии 1.0.

Спасибо!

Ответов (2)

Решение

Итак, проблема была вызвана тем, что я случайно дважды вызвал конструктор MultipartParser. Второй раз не удалось, так как запрос уже был обработан.

http://www.servlets.com/cos/faq.html

Это указывает на то, что возникла проблема с анализом запроса POST, отправленного клиентом. Причин проблемы может быть много:

  • Клиент нажал кнопку СТОП (на самом деле это не проблема, но вызывает преждевременное завершение)
  • Ошибка в веб-форме
  • Ошибка в сервлете
  • Ошибка в веб-сервере
  • Ошибка в браузере
  • Ошибка в самой библиотеке com.oreilly.servlet

История показала, что веб-сервер является наиболее частой причиной проблем, вероятно, из-за того, что существует очень много разных серверов, и кажется, что немногие производители тестируют свои возможности загрузки двоичных файлов.

Во-первых, убедитесь, что ваш клиент не нажимает кнопку СТОП. Затем проверьте, размещена ли уже ваша проблема на ресурсе «Ошибки сервлетов, о которых вам нужно знать» на этом сайте. Если об этом мало что известно, то вы должны быть одними из первых, кто об этом узнает! И вы можете поделиться с нами своим открытием здесь!

Во-вторых, проверьте, работает ли загрузка, используя предоставленную форму upload.html и класс DemoRequestUploadServlet.java. Некоторые люди находили в своей форме ошибки, которые вызывали проблемы. Проверка этой комбинации покажет, так ли это. Один пользователь, Duke Takle, обнаружил, что это исключение было вызвано перенаправлением:У меня был такой же «преждевременный конец», что и у Альберта Смита. Я обнаружил, что проблема была изолирована в IE 5.0. Приложение, которое меня беспокоило, выполняло перенаправление после создания MultipartRequest. Похоже, что эта конструкция прошла хорошо, за исключением того, что в IE 5.0 браузер снова попытался сделать запрос, и к тому времени ServletInputStream был пуст. Я изменил приложение, чтобы просто написать необходимый ответ вместо перенаправления. Эта проблема была обнаружена и исправлена, как описано в Tomcat 4.0 и Weblogic 6.1.Другие пользователи обнаружили ошибки в своем обслуживающем сервлете, где они вызывают request.getParameter () вместо multipartRequest.getParameter (), а некоторые серверы ложно считывают входной поток, когда их getParameter () вызывается, вызывая «неожиданный конец части».