Ver Mensaje Individual
  #10 (permalink)  
Antiguo 18/05/2009, 04:12
AlphaCrux
 
Fecha de Ingreso: mayo-2009
Mensajes: 15
Antigüedad: 15 años
Puntos: 0
Respuesta: FileUpload objeto request no devuelve datos

Cita:
Iniciado por elAntonie Ver Mensaje
No, no. Olvidate del request.getParameter().

Te pongo un ejemplo que creo que veras cristalino. Este es un servlet que recibe un formulario multpart (si no es multipart, no hay fichero que valga), con un campo tipo file y otros campos, texto, hidden, y demas zarandajas.

CPlantillaDoc es una clase, uno de sus campos es el fichero (un inputStream), el resto de los campos del formulario son descripcion, procedencia, e id, te explico esto para que no busques tres pies al gato, y te centres en lo que de verdad interesa.

Observa como recorre el 'formulario' con el while y sencillamente preguntando si es un campo tipo file (isFile()) o si es tipo 'otro tipo de campo' (isParam()), obtiene cada dato.

No hace falta que te lo diga, pero ya sabras que SOLO llegan los campos que estan habilitados. Cualquier campo DISABLED NO SE RECOGE.

Dicho esto, vamos al grano. Ahi tienes el service() de mi servlet. (Ojito que esta registrado)

Código:
  public void service(HttpServletRequest request, 
                      HttpServletResponse response) throws ServletException, 
                                                           IOException {

    Traza.debug(this, "->service()");
      HttpSession session = request.getSession(true);
    DocumentosBD documentosBD = new DocumentosBD(); 
    PrintWriter out = response.getWriter();
    response.setContentType("text/html");
    boolean fin = false;

    String login = session.getAttribute("login").toString();
    String dir_ip = request.getRemoteAddr();
    String id_asesoria = session.getAttribute("var_id_asesoria").toString();
      CPlantillaDoc cPlantillaDoc = new CPlantillaDoc();
      String extension = "";

    //parametros recibidos del formulario
    String nombre = "";
    String procedencia = "";
		String id = "";//el id_expediente o el id_tramite
    try 
    {
      MultipartParser mp = new MultipartParser(request, 50 * 1024 * 1024, false, false); // 50MB
      Part part;
      while ((part = mp.readNextPart()) != null)  // recorremos el 'formulario'
     {
        if (part.isParam()) // es de tipo 'loqueseamenosfile'?? ein??
        {
          // Tratamos los parametros que vienen en el request
          String name = part.getName();
          ParamPart paramPart = (ParamPart)part;
          String valorcadena = paramPart.getStringValue();
          fin = null == valorcadena;
          if (!fin) {
            if (name.equals("descripcion")) 
              nombre = valorcadena;
            if (name.equals("procedencia")) 
              procedencia = valorcadena;
            if (name.equals("id")) 
              id = valorcadena;

          }
        } 
        else if (part.isFile()) //es el fichero??
        {
          FilePart filePart = (FilePart)part;
          String nombreFichero = filePart.getFileName();
          int posipunto = nombreFichero.lastIndexOf(".");
          if (posipunto > -1)
            extension = nombreFichero.substring ( posipunto + 1, nombreFichero.length());
          else
            extension = "txt";
          cPlantillaDoc.setNom_plantilla(nombre);
          cPlantillaDoc.setDocumento(filePart.getInputStream());
          cPlantillaDoc.setId_asesoria(id_asesoria);
        } 
      } 
//esto a ti te da lo mismo
      try {
      	if (procedencia.equals("E"))
        	documentosBD.adjuntarDocumentoExpediente ( id, cPlantillaDoc, login, dir_ip, extension );
        else
        	documentosBD.adjuntarDocumentoTramite ( id, cPlantillaDoc, login, dir_ip, extension );	
      } catch (Exception e) {
        Traza.exception(this, "->service->Exception->", e);
        muestraError(request, e.getMessage(), out);
      }

    } catch (IOException primEx) {
      Traza.exception(this, "->service->IOException->" , primEx);
      muestraError(request, "Error almacenando el fichero. Intentelo de nuevo", out);
    } catch (Exception exc) {
      muestraError(request, "Error guardando el fichero. Intentelo de nuevo", out);
		}
    out.println("<html>");
    out.println("<head>");
    out.println("<title></title>");
    out.println("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">");
      out.println("<script language='JavaScript' src='" + request.getContextPath() + "/expedientes/gestion/js/adjuntar_documento.js'></script>");
    out.println("</head>");
    out.println("<body onload=\"ok();\">");
    out.println("</body>");
    out.println("</html>");

    //Si todo ha ido bien se manda la p?gina de ?xito
    out.close();
  }
Sencillo??

Saludos.

mmm pues asi por lo q he visto, si, parece q es muy sencillo :p jejejej
ahora me voy a poner con ello en mi aplicación a ver si consigo dejarlo hecho ya de una vez q le estoy dedicando demasiado tiempo a este apartado.

Muchas gracias elAntoine :)