Передача параметров вместе с формой загрузки нескольких частей / данных формы (Java Http Post Upload)

У меня есть база кода, которая в настоящее время загружает файл с помощью Post и имеет enctype как multipart/form-data. Теперь мне нужно включить некоторые элементы формы, т.е. некоторые параметры также будут переданы вместе с загрузкой файла. Я создал свою HTML-форму, но я не могу использовать request.getParameter, потому что это многокомпонентная форма. Может ли кто-нибудь предложить мне, как мне передать параметры вместе с моим файлом загрузки. Я предоставляю коды ниже. Пожалуйста, предложите мне, как обойти на основе совместимости моих кодов

if (!ServletFileUpload.isMultipartContent(request)) {
  throw new CustomUploadException("Not a file upload request");
}

ServletFileUpload  upload = new ServletFileUpload();
FileItemIterator iter = upload.getItemIterator(request);

while (iter.hasNext())
{
  FileItemStream item = iter.next();

  if (item.isFormField() == false && 
      item.getFieldName().equalsIgnoreCase("xmlfile"))
  {
      String fileName = item.getName();
      myBean.setFileName(fileName );
  }

}

3 ответа

Решение

Если isFormField на FileItemStream возвращает true, это нормальное поле. Ты можешь использовать openStream и читать содержимое в строку.

Что-то вроде этого:

FileItemStream item = iter.next();
if(item.isFormField()) {
   // Normal field
   String name = item.getFieldName();
   String value = Streams.asString(item.openStream());
} else {
   // File
}

Streams.asString принимает второй параметр, который представляет собой кодировку charset, вам может потребоваться указать тот, который подходит для вашего сайта.

Чтобы отправить параметр с помощью FileUpload, его просто нужно добавить в URL в методе setAction следующим образом:

formPanel.setAction ("< ProjectURL> /< YourServletName>?< YourParameterName> =" + параметр);

А в вашем сервлете просто получите параметр следующим образом:

req.getParameter ("< YourParameterName>");

Надеюсь, поможет;-)

Подобные решения:

FileItemStream item = iter.next();
if(item.isFormField()) {
    String value = item.getString();
}

или же

FileItemStream item = iter.next();
if(item.isFormField()) {
   InputStream name = item.getInputStream();
   String value = Streams.asString(name);
}
Другие вопросы по тегам