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

problemas al subir archivo y procesarlo

Estas en el tema de problemas al subir archivo y procesarlo en el foro de Java en Foros del Web. Hola a todos! Tengo un formulario para subir archivos al servidor utilizo la library fileupload y io. Todo parece que va bien. Subo el archivo ...
  #1 (permalink)  
Antiguo 28/05/2009, 02:45
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
problemas al subir archivo y procesarlo

Hola a todos!

Tengo un formulario para subir archivos al servidor utilizo la library fileupload y io.

Todo parece que va bien. Subo el archivo y aparece en el directorio que he yo quería y abro el archivo y tiene el contenido ok.

El problema es el siguiente: Solo se pueden subir archivos xml y una vez que los subo los proceso para cargar el contenido.

Pero resulta que cuando voy a parsearlo me dice que el archivo no existe no se ha encontrado y me da un error:

java.io.FileNotFoundException: http://localhost:8084/Proyecto/archivos/e.xml

La verdad que no se como solucionarlo por que cuando yo subo archivos con la clase fileupload los dejo en el siguiente directorio

C:\Documents and Settings\MaLo\Mis documentos\NetBeansProjects\Proyecto\web\archivos

Y cuando lo voy a parsear la direccion que le doy es http://localhost:8084/Proyecto/archivos/

Pero eso es lo mismo no? vamos es que si pusiera en la clase de procesar archivo la direccion con Documents.... entonces ya si que no procesa nada.

Otra cosa curiosa es que si por ejemplo reinicio el ordenador entonces ya si que detecta el archivo que he subido y lo procesa ok.

¿Cual puede ser el error y como puedo solucionarlo?

Si necesitais más información preguntarme porque no se como arreglar esto.

Gracias.
  #2 (permalink)  
Antiguo 28/05/2009, 06:01
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: problemas al subir archivo y procesarlo

Si no me equivoco, por lo que pones, el servidor que usa netbeans crea una carpeta temporal con el proyecto, por lo que si le agregas un archivo, aunque tu lo tengas en la carpeta web de tu proyecto, en ese localhost temporal no esta.

Yo lo que hacia, era trabajar en local con una direccion y en remoto con otra. Simplemente, crea una constante path con los dos valores y en funcion de si vas a desplegar la aplicacion, o si vas a hacer pruebas con netbeans usas una u otra. Al menos esa es la conclusion a la que llegue cuando tuve ese problema. Por ejemplo, lo que yo uso es:

Código:
public class Constantes{
    public static final String PATH = "/usr/local/shared/tomcat/jesuscoro/webapps/biblioteca/site";
    //public static final String PATH = "D:/Mis documentos(jesus)/NetBeansProjects/biblioteca/web/site";        

}
Donde le dices la direccion que utlizar pones la constante y luego, solo tienes que comentar una linea y descomentar la otra (o viceversa) en funcion de que vayas a hacer.

Espero que te sirva
  #3 (permalink)  
Antiguo 28/05/2009, 08:14
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: problemas al subir archivo y procesarlo

"/usr/local/shared/tomcat/jesuscoro/webapps/biblioteca/site"; Este es el path de la carpeta temporarl de Netbeans bueno en tu caso es jesuscoro en el mio sera otra cosa..

Sabes como se hace para saber cual es la carpeta temporar del localhost en el Netbeans. Para trabajar en remoto es decir con el localhost:8084/....

Como ya te dije antes lo que hago es subirlo al directorio C:\Documents and Settings\MaLo\Mis documentos\NetBeansProjects\Proyecto\web\archivos y procesarlo con el path http://localhost:8084/Proyecto/archivos/

Porque tambien probé a subirlo con el path http://localhost:8084/Proyecto/archivos/ y no me dejaba.

Asi que si me dices como conseguir el path de los archivos temporarles... y bueno cuando lo tenga que deberia hacer.?(Subirlos a ese path) y ya prodría procesarlos utilizando el path http://localhost:8084/Proyecto/archivos/

A ver si consigo solucionarlo que esto me tiene loco!!


Gracias

Última edición por dablin; 28/05/2009 a las 08:38
  #4 (permalink)  
Antiguo 28/05/2009, 11:04
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: problemas al subir archivo y procesarlo

Cita:
Iniciado por dablin Ver Mensaje
"/usr/local/shared/tomcat/jesuscoro/webapps/biblioteca/site"; Este es el path de la carpeta temporarl de Netbeans bueno en tu caso es jesuscoro en el mio sera otra cosa..
No, esa es la ruta del servidor remoto que uso (es linux, por eso lo de /usr....)
La ruta del directorio que crea netbeans, la verdad es que no la uso, por que en local me importaba mas bien poco ya que decidia yo, y nunca la busque.

Has probado a arrancar el servidor tu a mano, en vez de que lo arranque netbeans? A lo mejor por ahi encuentras donde lo guarda de verdad y puedes ponerle tu una ruta relativa

Tambien puedes probar a imprimir la ruta del archivo justo despues de subirlo, a ver que path tiene y seguimos investigando por ahi.

Postea novedades, a ver que podemos hacer.
  #5 (permalink)  
Antiguo 28/05/2009, 11:27
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: problemas al subir archivo y procesarlo

Me estoy liando un poco :)

Yo subo el archivo con este código

jsp
Código:
 <form method="POST" enctype='multipart/form-data' action="http://localhost:8084/Proyecto/UploadFile">
           <input type="file" name="fichero">
           <input type="submit" value="Enviar">
       </form>
Servlet

Código:

try {
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
          
            DiskFileItemFactory factory = new DiskFileItemFactory();
            factory.setSizeThreshold(4096);
      
            factory.setRepository(new File("c:/"));
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setSizeMax(10000000);

            List fileItems = upload.parseRequest(request);

            Iterator i = fileItems.iterator();
            FileItem fi = (FileItem)i.next();       

            String path="C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo";
        
           String fileName= fi.getName();        
           fi.write(new File(path, fileName));
        }catch(Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
         
        }

.//respuesta.
El path donde subo el archivo es C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo

En ese directorio tengo los archivos que he subido y aparte otros tantos que tambien proceso si el usuario pincha en un enlace..

Entonces si el usuario pincha en un enlace y el archivo estaba ya en ese directorio se procesa ok.

Parsear el archivo xml
Código:
 try {
          // 2. Usar DocumentBuilderFactory para crear un DocumentBuilder
          DocumentBuilder db = dbf.newDocumentBuilder();
          // 3. Parsear a partir de un archivo
          System.out.println("DIR "+ dir);
         //dir = http://localhost:8084/Proyecto/archivos/  (mas el archivo a procesar depende del enlace que el usuario pinche)


          dom = db.parse(dir);
          
        } catch (ParserConfigurationException pce) {
            pce.printStackTrace();
        } catch (SAXException se) {
            se.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
Si el archivo ya estaba en C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo cuando arrancas el servidor todo es ok.
y al llamar a la dir http://localhost:8084/Proyecto/archivos/ al parsear el archivo dice que si está y no hay problemas
Si subes el archivo en el momento que haces http://localhost:8084/Proyecto/archivos/e.xml al parsearlo entonces dice que el archivo no está.

Bueno yo creo que eso ya lo tenias claro jeje pero yo es para volverte a preguntar cosas...

http://localhost:8084/Proyecto/archivos/ es la direccion del servidor que hace referencia a la direccion C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo

Entonces que es lo que tendría que cambiar.... la direccion del localhost cuando voy a parsear el archivo o la direccion donde guardo el archivo C:/...


No se supone que la ruta donde se guarda el archivo es la misma que donde lo guardo es decir C:/....
en caso contrario como se hace para ver cual es esa direccion?

(Otra cosa cuando le doy a stop y al momento star al servidor) entonces ya se detecta el archivo cuando accedo al localhost....

Que lio tengo je :) por hoy lo voy a dejar que estoy cansado de buscar cosas por google y por to los laos

A ver si consiguiera arreglarlo. :)
  #6 (permalink)  
Antiguo 28/05/2009, 12:11
 
Fecha de Ingreso: noviembre-2008
Mensajes: 115
Antigüedad: 15 años, 6 meses
Puntos: 4
Respuesta: problemas al subir archivo y procesarlo

A ver si no me lio demasiado.

1) Cuando tu arrancas la aplicacion o tu servidor desde netbeans, este coge la carpeta c:\Documents .... y, digamos que lo que hace (por que tal vez no sea exactamente asi, pero el resultado es el mismo), despliega la aplicacion en un directorio temporal, que cuando pares el servidor desaparecera. Por eso, cuando tu subes un archivo, aunque estara en c:\Documents.... no estara en ese directorio temporal, por que netbeans ya lo desplego y no vuelve a mirar ahi. Sin embargo, si tu paras y arrancas el servidor, o vuelves a deplegar la aplicacion, ese archivo, que ahora esta en c:\Documents.... si podras procesarlo, por que netbeans vuelve a coger esa carpeta y desplegarla.

2) Si tu le dices que suba el archivo a c:\Documents...., para procesarlo en ese mismo "despliegue", deberias buscar en esa misma carpeta.

Prueba a decirle que te suba el archivo a http://localhost:8084/Proyecto/web/archivos, pero no se yo si esto funcionara cuando arranques el servidor desde netbeans.

Mi consejo, como ya te dije, es que uses dos path, uno cuando lo hagas en local (o tal vez sea mejor decir desde netbeans) y otro en remoto (o cuando vayas a arrancar tu el servidor a mano),
Si arrancas desde netbeans creo que podria ser algo asi:
Código:
    String path="C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo";
    //String path="http://localhost:8084/Proyecto/web/archivo";    
           String fileName= fi.getName();        
           fi.write(new File(path, fileName));

y si lo haces a mano, pues al reves

Código:
    String path="C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo";
    //String path="http://localhost:8084/Proyecto/web/archivo";    
           String fileName= fi.getName();        
           fi.write(new File(path, fileName));

o incluso, puedes capturar en un try si existe el archivo, y si no, que lo intente con la otra ruta:

Código:
    String pathNetBeans = "C:/Documents and Settings/MaLo/Mis documentos/NetBeansProjects/Proyecto/web/archivo";
    String pathAMano = "http://localhost:8084/Proyecto/web/archivo";    
           String fileName= fi.getName();        
    try{
           fi.write(new File(pathNetBeans, fileName));
    }catch(FileNotFoundException ex){
           fi.write(new File(pathAMano, fileName));
    }
Seguro que hay formas mejores de hacerlo, y que alguien te puede explicar exactamente como trabaja netbeans, pero esa fue la forma en que lo solucione yo.

De todas formas, no te recomiendo que lo pongas todo con rutas absolutas, por que en el momento que quieras desplegar eso en un servidor que no este en tu ordenador..... te imaginas, no?

No se si no te liaria mas de lo que ya estabas.
  #7 (permalink)  
Antiguo 01/06/2009, 04:53
 
Fecha de Ingreso: enero-2009
Mensajes: 148
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: problemas al subir archivo y procesarlo

He probado eso pero tampoco me va porque si pongo el pathAMano me salta una excepcion

al enviar el archivo porque el http://localhost:8084/Proyecto/web/archivo dice que no es valido ese directorio.

Buah..! la verdad que no se como se hace esto..!
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 01:01.