Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema con un servlet al cargar archivos al servidor

Estas en el tema de Problema con un servlet al cargar archivos al servidor en el foro de Java en Foros del Web. Buenos días a todos Quisiera que por favor me colaboraran con el siguiente inconveniente. Tengo un formulario para cargar un archivo y ejecutarlo con un ...
  #1 (permalink)  
Antiguo 18/07/2016, 08:56
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Problema con un servlet al cargar archivos al servidor

Buenos días a todos

Quisiera que por favor me colaboraran con el siguiente inconveniente. Tengo un formulario para cargar un archivo y ejecutarlo con un servlet, pero tengo un inconveniente. Debo pasar unas variables al servlet y pasa lo siguiente:

mi formulario es el siguiente:

Código HTML:
Ver original
  1. <form method="post" action="../subir_archivo" enctype="multipart/form-data">
  2.             <table class='tablas'>
  3.                 <tr><th class='titulo3'>Archivo:</th><td><input type="file" name='archivo'></td></tr>
  4.                 <tr><td colspan='2'><button>Subir archivo</button>
  5.                         <input type='hidden' name='item_reunion' id="item_reunion" value=''>
  6.                         <input type='hidden' name='item' id="item" value=''>
  7.                         <input type="text" name='prueba' value='juan'>
  8.                     </td>
  9.                 </tr>
  10.             </table>
  11.         </form>

muy sencillo, no tiene nada de raro porque aún estoy en pruebas, y mi servlet es el siguiente:

Código Java:
Ver original
  1. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  2.             throws ServletException, IOException {
  3.        
  4.         response.setContentType("text/html;charset=UTF-8");
  5.         PrintWriter out = response.getWriter();
  6.        
  7.         String item_reunion = request.getParameter("item_reunion");
  8.         String item_req = request.getParameter("item");
  9.         String prueba = request.getParameter("prueba");
  10.            
  11.        try {
  12.             String nombre_archivo = "";
  13.            
  14.             DiskFileItemFactory factory = new DiskFileItemFactory();
  15.            
  16.             factory.setSizeThreshold(4096);
  17.            
  18.             factory.setRepository(new File(rutaFichero));
  19.            
  20.             ServletFileUpload upload = new ServletFileUpload(factory);
  21.            
  22.             List items = upload.parseRequest(request);
  23.            
  24.             for (Object item1 : items) {
  25.                 FileItem item = (FileItem) item1;
  26.                 nombre_archivo = new File(item.getName()).getName();
  27.                 File file = new File(rutaFichero, nombre_archivo);
  28.                 item.write(file);
  29.             }
  30.            
  31.             out.println("<script>alert('se cargó el archivo "+nombre_archivo+".');</script>");
  32.         }
  33.         catch (Exception ex) {
  34.             out.println("<script>alert('Ocurrió "+item_reunion+" un error"+item_req+" y "+prueba+".');</script>");
  35.             Logger.getLogger(subir_archivo.class.getName()).log(Level.SEVERE, null, ex);
  36.            
  37.         }finally {
  38.             out.println("<script>document.location.href = 'webmaster/versolicitud.jsp?item="+item_req+"';</script>");
  39.             out.close();
  40.         }
  41.     }


El problema como tal es que el servletme carga el archivo en la carpeta que yo le indico, pero no me está capturando el valor de las variables que traigo del html, y sí le quito el
Código HTML:
Ver original
  1. enctype="multipart/form-data"
al formulario, pues obviamente no me va a cargar ningún archivo, pero en ese caso sí pasan las variables y me las imprime.

¿alguien podría indicarme cual puede ser el error, o en que estoy fallando?

Muchas gracias de ante mano a todos.
  #2 (permalink)  
Antiguo 18/07/2016, 11:44
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con un servlet al cargar archivos al servidor

Buenas,

Cuando haces un multpart/form-data el getParameter devuelve siempre null.

No lo indicas en ninguna parte a pesar de que es un dato fundamental para poder ayudarte, pero creo que utilizas Apache Commons FileUpload para subir el fichero.

En ese caso podrias leer las variables asi:

Código Java:
Ver original
  1. List items = upload.parseRequest(request);
  2.  
  3. for (Object item1 : items) {
  4.    FileItem item = (FileItem) item1;
  5.   if( item.isFormField() )
  6.   {
  7.     String fieldName = item.getFieldName();
  8.     String value = item.getString();
  9.   }
  10. }

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #3 (permalink)  
Antiguo 18/07/2016, 12:33
 
Fecha de Ingreso: septiembre-2015
Mensajes: 58
Antigüedad: 8 años, 7 meses
Puntos: 2
Respuesta: Problema con un servlet al cargar archivos al servidor

Cita:
Iniciado por Profesor_Falken Ver Mensaje
Buenas,

Cuando haces un multpart/form-data el getParameter devuelve siempre null.

No lo indicas en ninguna parte a pesar de que es un dato fundamental para poder ayudarte, pero creo que utilizas Apache Commons FileUpload para subir el fichero.

Un saludo
si tienes mucha razón, me devuelve un null, olvidé ese pequeño detalle.

y si, lo que tu me indicas me funcionó perfecto, al final hice lo siguiente:

Código Java:
Ver original
  1. for (Object item1 : items) {
  2.                     FileItem item = (FileItem) item1;
  3.                     if (item.isFormField()) {
  4.                         String fieldname = item.getFieldName();
  5.                         String fieldvalue = item.getString();
  6.                         out.println("valores "+fieldname+" - "+fieldvalue);
  7.                     }else{
  8.                         nombre_archivo = new File(item.getName()).getName();
  9.                         File file = new File(rutaFichero, nombre_archivo);
  10.                         item.write(file);
  11.                     }
  12.                 }

ahora tengo que recoger los valores en las variables que necesito y hacer el registro.

Muchas gracias, me salvaste.

Etiquetas: jsp
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:04.