Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Upload con path errato !!!

    Ciao a tutti,
    spero veramente di trovare qualcuno che sa darmi una mano perchè stò diventando pazzo!
    Da una pagina jsp tramite un form carico e salvo delle immagini all'interno di una specifica cartella. La cosa strana che improvvisamente (prima non lo faceva) quando fa l'upload si porta dietro non solo il nome del file ma anche tutto il path da dove viene caricata l'immagine ... c:/document... ecc. ecc. Ovviamente da dentro l'applicazione non ritrova poi l'immagine, che viene si caricata sul server (quindi esiste) ma nella pagina html generata dinamicamente va a cercare un path che fisicamente non esiste sul server.
    Una cosa che non riesco a spiegarmi ... soprattutto perchè tutto funzionava bene ... solamente dopo che ho provato a spostare la cartella di destinazione delle immagini fuori dall'ambiente Tomcat (facendo una serie di prove sul server) ha dato questo problema!
    Per favore c'è qualcuno a cui è capitato un problema simile o in ogni caso ha un pò di pazienza per riuscire a capire dove è il problema? Non sono molto pratico purtroppo!

    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    postare codice upload.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3

    Ecco il codice "upload"

    Ciao,
    scusa il ritardo nella risposta.
    Ecco il codice che effettua l'upload delle immagini :

    codice:
    package srv;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Vector;
    
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUpload;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    
    import cls.CreaSelect;
    import cls.EseguiSQL;
    
    
     public class Upload extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
       static final long serialVersionUID = 1L;
       
       
    	public Upload() {
    		super();
    	}   	
    	
    	
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		doPost(request, response);
    	}  	
    	
    	
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		
    		
    		HttpSession session =request.getSession();
    		
    		ServletContext sc = this.getServletContext(); 
    		String server = sc.getInitParameter("server"); 
    		String port = sc.getInitParameter("port"); 
    		String id = sc.getInitParameter("id"); 
    		String pw = sc.getInitParameter("pw"); 
    		String nomeDB = sc.getInitParameter("nomeDB");
    		String pathFotoDir = sc.getInitParameter("pathFotoDir");
    		
    		System.out.println("RicercaGestFin sever: "+server);
    		System.out.println("RicercaGestFin port: "+port);
    		System.out.println("RicercaGestFin id: "+id);
    		System.out.println("RicercaGestFin pw: "+pw);
    		System.out.println("RicercaGestFin nomeDB: "+nomeDB);
    		
    		
    		String codPers=(String)session.getAttribute("codPers");
    		System.out.println("Upload - codPers: "+codPers);
    		
    		DiskFileItemFactory factory = new DiskFileItemFactory();
    
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		
    		String pathSave = null;
    		
    		
    		boolean multi = upload.isMultipartContent(request);
    		boolean esitoOper=true;
    		
    		String message="";
    					
    		
    		try {
    						
    				
    				if(multi)
    					System.out.println("è multi part!!!!!");
    				else
    					System.out.println(" NON è multi part!!!!!");
    
    				List items = upload.parseRequest(request);
    				
    				Iterator iterator = items.iterator();
    				
    				while(iterator.hasNext()) {
    					
    					System.out.println(" A");
    					
    					FileItem item = (FileItem) iterator.next();
    					
    					System.out.println(" B");
    					
    					if(!item.isFormField()) {
    						System.out.println(" 1");
    						File fullFile  = new File(item.getName());  
    						System.out.println(" fullFile.getName(): "+fullFile.getName());
    						System.out.println(" 2");
    						
    						pathSave = pathFotoDir + codPers + "//img//" + fullFile.getName();
    												
    						System.out.println(" 3");
    						
    						System.out.println("Upload - pathSave: "+pathSave);
    						File savedFile = new File(pathSave);
    						
    						item.write(savedFile);
    						System.out.println(" 4");
    					} 	
    			      
    				}
    				
    						
    			
    		} catch (Exception e) {
    			
    			e.printStackTrace();
    			message="Erroe nell'upload: "+e.getMessage();
    			esitoOper=false;
    		}
    		
    		
    			
    			String query="";
    			try {
    				
    				System.out.println("Upload - stampa query: "+query);
    							
    				CreaSelect creaSelect = new CreaSelect();
    				String querySelect = creaSelect.ricercaSpecifica(codPers);
    								
    				EseguiSQL eSQL2 = new EseguiSQL(server,port, nomeDB, id, pw);
    				
    				Vector listaElementi=listaElementi = eSQL2.executeSelect(querySelect);
    				System.out.println("Upload - select eseguita");
    				request.setAttribute("listaRecord", listaElementi);
    				
    				
    			
    			} catch (Exception Exc) {
    				
    				Exc.printStackTrace();
    			
    			} finally {
    				
    				
    			}
    			
    			if(esitoOper) {
    				
    				message="L'immagine è stata salvata.";	
    			
    		}
    			
    		
    		request.setAttribute("message", message);
    		
    		getServletContext().getRequestDispatcher("/jsp/aggiorna.jsp").forward(request, response);
    		
    	}   	  	    
    }
    La prima volta che salva le immagini viene creata una cartella chiamata con il "codPers" che identifica in modo univoco l'utente.
    Come ti accennavo quando salva l'immagine si porta dietro tutto il path da dove viene caricata (es. c:\document\ecc...).
    L'upload viene richiamato da una pagina .jsp dove si trova il classico "form" con il campo "sfoglia" ed il bottone "carica".
    Spero potrai darmi qualche info per la risoluzione di questo problema.

    Grazie mille in ogni caso!

    Ciao!

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    *Indenta il codice e usa l'apposito tag la prossima volta*

    E' un problema di FileItem.getName:
    getName
    java.lang.String getName()Returns the original filename in the client's filesystem, as provided by the browser (or other client software). In most cases, this will be the base file name, without path information. However, some clients, such as the Opera browser, do include path information.

    Returns:
    The original filename in the client's filesystem.
    Per evitare problemi del genere, strippa tutto quello che precede l'ultimo "/" (o "\") e passa solo il nome del file senza percorso.

    Un modo potrebbe essere:

    codice:
    int index = 1 + Math.max(daForm.lastIndexOf("\\"), daForm.lastIndexOf("/"));
    String ripulito = daForm.substring(index));
    Dove "daForm" contiene il percorso recuperato con FileItem.getName e "ripulito" è il percorso senza menate varie.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5

    Grazie!

    Grazie mille per le informazioni!
    Sei stato velocissimo!
    Faccio le modifiche e poi ti aggiorno per farti sapere come è andata!

    Grazie ancora!

    Manuel

  6. #6

    Risolto!

    Ho apportato le modifiche che mi hai suggerito
    e finalmente funziona tutto!
    Adesso carica il nome dell'immagine senza portarsi dietro il path di origine.

    Ti ringrazio veramente tantissimo!!!

    Grazieeeeeee !!!!!

    Ciao!!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prego. Tutto sta nel leggere le specifiche delle classi/metodi utilizzati. Lo so bene che soprattutto quando si programma con un IDE è facile farsi prendere la mano e utlizzare metodi e classi solo perché "suonano" bene... quasi sempre la scelta è corretta, salvo comportamenti inaspettati come questo in cui sei incorso tu (e che tra l'altro ha anche poco a che fare con il server-side, ma a cui bisogna mettere una pezza server-side).
    Buona settimana
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.