Comment puis-je lire d'autres paramètres dans un formulaire multipart avec Apache Commons
-
20-08-2019 - |
Question
J'ai un formulaire de téléchargement de fichier qui est envoyé sur un servlet (en utilisant l'encodage multipart / form-data). Dans le servlet, j'essaie d'utiliser Apache Commons pour gérer le téléchargement. Cependant, il existe également d'autres champs dans le formulaire qui ne sont que des champs ordinaires. Comment puis-je lire ces paramètres à partir de la demande?
Par exemple, dans mon servlet, j'ai un code comme celui-ci à lire dans le fichier téléchargé:
// 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 ...
}
La solution
Vous pouvez essayer quelque chose comme ceci:
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
}
}
}
Autres conseils
Il m’a fallu quelques jours pour comprendre cela, mais le voici et ça marche, vous pouvez lire des données en plusieurs parties, des fichiers et des paramètres, voici le code:
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();
}
Avez-vous déjà essayé request.getParam ()?