2011-04-20 12 views
5

que uso de Apache Commons FileUpload en una aplicación del lado del servidor Java que tiene un formulario HTML con los campos:valores de los campos de introducción de texto en un formulario HTML multiparte

  1. un cado de destino que será llena de correo electrónico dirección del buzón de destino

  2. un mensaje de texto con un mensaje del remitente

  3. un campo <input type=file ... para subir una foto. Puedo recibir archivos cargados (como una secuencia) pero ¿cómo puedo acceder a 1) y 2) valores de formulario (completados por el usuario de la aplicación)? Muchas gracias, Aurel

Respuesta

4

usted puede recibirlos utilizando la misma API. Solo enganche cuando FileItem#isFormField() devuelve true. Si devuelve false, entonces es un archivo cargado ya que probablemente ya lo esté utilizando.

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); 
     for (FileItem item : items) { 
      if (item.isFormField()) { 
       // Process regular form field (input type="text|radio|checkbox|etc", select, etc). 
       String fieldname = item.getFieldName(); 
       String fieldvalue = item.getString(); 
       // ... (do your job here) 
      } else { 
       // Process form file field (input type="file"). 
       String fieldname = item.getFieldName(); 
       String filename = FilenameUtils.getName(item.getName()); 
       InputStream filecontent = item.getInputStream(); 
       // ... (do your job here) 
      } 
     } 
    } catch (FileUploadException e) { 
     throw new ServletException("Cannot parse multipart request.", e); 
    } 

    // ... 
} 
+5

Tal vez esto es una pregunta tonta, pero no puedo utilizar item.getString, porque getString no es un método en la clase FileItem o sus antepasados ​​... Por favor, muéstrame cómo me ocupo de esto – aurel

+0

Definitivamente está en la API http://commons.apache.org/fileupload/apidocs/org/apache/commons/fileupload/FileItem.html# getString% 28% 29 Aparentemente, ¿no estás usando Apache Commons FileUpload? – BalusC

1

Esto es lo que estoy utilizando para este fin:

 
    public static Hashtable getParamsFromMultipartForm(HttpServletRequest req) throws FileUploadException { 
     Hashtable ret = new Hashtable(); 
     List items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(req); 
     for (FileItem item : items) { 
      if (item.isFormField()) { 
       ret.put(item.getFieldName(), item.getString()); 
      } 
     } 
     return ret; 
    } 

Y entonces, cada vez que necesitan el valor de cualquiera de mis params, acabo de escribir, por ejemplo:

 
//at the beginning of a servlet 
Hashtable multipartParams = TheClassWhereIPutThatMethod.getParamsFromMultipartForm(req);

String myParamFromForm = multipartParams.get("myParamFromForm");

5

Supongo que está utilizando un FileItemIterator para repetir los elementos en la solicitud. El método iterators next() devuelve FileItemStream (no FileItem). Abra la corriente en ese objeto y convertirlo en una cadena como esta:

import org.apache.commons.fileupload.util.Streams; 
... 
FileItemStream item = iterator.next(); 
InputStream stream = item.openStream(); 
String name = item.getFieldName(); 
String value = Streams.asString(stream); 

El método getString sugerido por otras respuestas es un método en la interfaz FileItem.

0

Por lo tanto, lo que he hecho es utilizar la instancia de fileItem como en:

Hashtable incoming = new Hashtable(); 
fileName = sfu.parseRequest(request); 

//iterating over each uploaded file and storing the values of different parameters in the HashTable (incoming) 

for(FileItem f:fileName) 
        { 
        incoming.put(f.getFieldName(), f.getString()); 
        } 
//utilizing that HashTable and getting the value of desired field in the below manner, as in my case i required the value of "permissions" from the jsp page 

      for(FileItem f:fileName) 
        { 
         String role= (String)incoming.get("permission"); //as it is a multipart form request, so need to get using this 
        } 

Gracias

Cuestiones relacionadas