Как я могу прочитать другие параметры в составной форме с помощью Apache Commons
-
20-08-2019 - |
Вопрос
У меня есть форма загрузки файла, которая отправляется обратно в сервлет (используя кодировку multipart / form-data).В сервлете я пытаюсь использовать Apache Commons для обработки загрузки.Однако у меня также есть некоторые другие поля в форме, которые являются простыми полями.Как я могу прочитать эти параметры из запроса?
Например, в моем сервлете у меня есть подобный код для чтения в закодированном файле:
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Parse the request
Iterator /* FileItem */ items = upload.parseRequest(request).iterator();
while (items.hasNext()) {
FileItem thisItem = (FileItem) items.next();
... do stuff ...
}
Решение
Вы могли бы попробовать что-то вроде этого:
while (items.hasNext()) {
FileItem thisItem = (FileItem) items.next();
if (thisItem.isFormField()) {
if (thisItem.getFieldName().equals("somefieldname") {
String value = thisItem.getString();
// Do something with the value
}
}
}
Другие советы
Мне потребовалось несколько дней, чтобы разобраться в этом, но вот оно, и оно работает, вы можете читать состоящие из нескольких частей данные, файлы и параметры, вот код:
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(req);
while(iterator.hasNext()){
FileItemStream item = iterator.next();
InputStream stream = item.openStream();
if(item.isFormField()){
if(item.getFieldName().equals("vFormName")){
byte[] str = new byte[stream.available()];
stream.read(str);
full = new String(str,"UTF8");
}
}else{
byte[] data = new byte[stream.available()];
stream.read(data);
base64 = Base64Utils.toBase64(data);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
Вы уже пробовали request.getParam()?
Не связан с StackOverflow