Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63

    Upload file, e ottenere il suo nome

    spiego meglio, ho un form nella pag newhtml.html cosi formata
    Codice PHP:
    <html>
        <
    head>
            <
    title></title>
            <
    meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </
    head>
        <
    body>
            
            <
    form action="Controller" method="post" enctype="multipart/form-data">
                
    Uppatoda: <input type="text" name="user">
                <
    input type="file" name="fileUpload"/>
                
    solo file tipo .xls
                
    <input type="submit" value="Invia"/>
            </
    form>
            
        </
    body>
    </
    html
    quando clicco su invia vado nella servlet Controller.java dove prendo il file, e lo salvo.Fin qui non ho trovato difficoltà. Il problema arriva ora.
    Ho creato una tabella ListaFile composta da 2 colonne (UppatoDa, NomeFile), da usare per verificare se è presente un file con quello stesso nome.

    Codice PHP:
    Connection con null;
            
            
            
    String user request.getParameter("user");
                   
            
    boolean isMultipart ServletFileUpload.isMultipartContent(request);

            if(
    isMultipart){
                try {
                    Class.
    forName("com.mysql.jdbc.Driver");
                    
    String connectionUrl "jdbc:mysql://localhost/prova?" "user=root&password=";
                    
    con DriverManager.getConnection(connectionUrl);
                    
    Statement stmt con.createStatement();
                    
                    
    DiskFileItemFactory factory = new DiskFileItemFactory();
                    
    ServletFileUpload upload = new ServletFileUpload(factory);
                    List 
    items upload.parseRequest(request);
                    
    Iterator itr items.iterator();
                    
                    while(
    itr.hasNext()) {
                        
    FileItem item = (FileItemitr.next();  
                        
                        if(!
    item.isFormField()) {
                            
    File fullFile  = new File(item.getName()); 
                            
    File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
                            
    item.write(savedFile);
                        } 
                        
    String nomeFileitem.getName();
                        
                        
    ResultSet rs stmt.executeQuery("Select * From listafile Where NomeFile= '"+nomeFile+"'");
                        
    rs.last(); 
                        
    int nRighe rs.getRow(); 
                        if (
    nRighe==0){
                            
    stmt.executeUpdate("INSERT INTO listafile (UppatoDa,NomeFile) VALUES ('"+user+"','"+nomeFile+"' ) ");
                        }
                        else {
                            
    out.println("il file è gia presente");
                        }
                        
                        
                    }
    //fine while
                    
    out.println("File salvato ");
                    
                    
                    
                    
                    
                }catch (
    Exception e) {
                    
    out.println("errore: "+e.getMessage());
                }
            } 
    In questo modo, però ho dovuto mettere le istruzioni SQL nel while, e so che è sbagliato, ma se le metto dopo dal while, la verifica non ha senso perchè il file risulterà essere stato salvato. Avevo pensato di mettere le istruzioni SQL prima del while ma ho l'errore sulla riga
    Codice PHP:
    String nomeFileitem.getName(); 
    (su item). La domanda è, come posso ottenere il nome del file che passo dalla form, prima che questo venga salvato?


    In modo logico vorrei poter fare questo


    Codice PHP:
    Connection con null;
            
            
            
    String user request.getParameter("user");
                   
            
    boolean isMultipart ServletFileUpload.isMultipartContent(request);

            if(
    isMultipart){
                try {
                    Class.
    forName("com.mysql.jdbc.Driver");
                    
    String connectionUrl "jdbc:mysql://localhost/tesi?" "user=root&password=";
                    
    con DriverManager.getConnection(connectionUrl);
                    
    Statement stmt con.createStatement();
                    
                    
    DiskFileItemFactory factory = new DiskFileItemFactory();
                    
    ServletFileUpload upload = new ServletFileUpload(factory);
                    List 
    items upload.parseRequest(request);
                    
    Iterator itr items.iterator();
                    
                    
                        
    String nomeFileitem.getName(); // qui c'è l'errore su item
                        
                        
    ResultSet rs stmt.executeQuery("Select * From listafile Where NomeFile= '"+nomeFile+"'");
                        
    rs.last(); 
                        
    int nRighe rs.getRow(); 
                        if (
    nRighe==0){
                            while(
    itr.hasNext()) {
                                
    FileItem item = (FileItemitr.next();
                                if(!
    item.isFormField()) {
                                    
    File fullFile  = new File(item.getName()); 
                                    
    File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
                                    
    item.write(savedFile);
                                } 
                            }
                            
    stmt.executeUpdate("INSERT INTO listafile (UppatoDa,NomeFile) VALUES ('"+user+"','"+nomeFile+"' ) ");
                        }
                        else {
                            
    out.println("il file è gia presente");
                        }  
                }catch (
    Exception e) {
                    
    out.println("errore: "+e.getMessage());
                }
            } 

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Upload file, e ottenere il suo nome

    Originariamente inviato da mauc
    In modo logico vorrei poter fare questo
    No il modo logico sarebbe questo: siccome tu "sai" che di file ce n'è solo 1 al upload, la sequenza potrebbe diventare

    1) Iteri sugli item della request per trovare il FileItem che ha il field name "fileUpload"
    (nota: la iterazione è prima, non mescolata al resto!)
    2) Verifichi se il filename è già presente in tabella
    3) Se non presente, lo inserisci, altrimenti segnali il messaggio.

    E per fare le cose "pulite", sarebbe meglio scrivere una classe di DAO per nascondere/incapsulare la logica di accesso al DB, così da poter usare metodi semplici es. verificaFileEsistente(...) e inserisciFile(....).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63

    Re: Re: Upload file, e ottenere il suo nome

    Originariamente inviato da andbin
    No il modo logico sarebbe questo: siccome tu "sai" che di file ce n'è solo 1 al upload, la sequenza potrebbe diventare

    1) Iteri sugli item della request per trovare il FileItem che ha il field name "fileUpload"
    (nota: la iterazione è prima, non mescolata al resto!)
    2) Verifichi se il filename è già presente in tabella
    3) Se non presente, lo inserisci, altrimenti segnali il messaggio.

    E per fare le cose "pulite", sarebbe meglio scrivere una classe di DAO per nascondere/incapsulare la logica di accesso al DB, così da poter usare metodi semplici es. verificaFileEsistente(...) e inserisciFile(....).
    i punti 2 e 3 sono ok, ma non ho capito il punto1.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Upload file, e ottenere il suo nome

    Originariamente inviato da mauc
    non ho capito il punto1.
    Prima cerchi il FileItem che ti serve .... poi fai tutto il resto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    ma se faccio il while per trovare il FileItem, poi se uso item.getName() fuori dal while, è un errore.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauc
    ma se faccio il while per trovare il FileItem, poi se uso item.getName() fuori dal while, è un errore.
    Devi disporre tu le variabili come ti servono e che il compilatore non ti dia errore .... io lo darei perlomeno scontato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    e lo so che devo disporre il tutto in modo che il compilatore non mi dia errore. Ma non so come ottenere il nome del file senza che il file venga uppato.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mauc
    e lo so che devo disporre il tutto in modo che il compilatore non mi dia errore. Ma non so come ottenere il nome del file senza che il file venga uppato.
    No, questo no. Quando la request viene parsata, il file è già stato uploadato e memorizzato con la tecnica del FileItemFactory (es. DiskFileItemFactory).

    Ma a te questo non interessa. A te serve prendere il nome e vedere se c'è già o no sulla tabella.

    Per il codice (come dicevo io di cercare prima il FileItem):

    codice:
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List items = upload.parseRequest(request);
    Iterator itr = items.iterator();
    
    FileItem fileUploadItem = null;
    
    while (itr.hasNext()) {
        FileItem item = (FileItem) itr.next();
    
        if (!item.isFormField() && item.getFieldName().equals("fileUpload")) {
            fileUploadItem = item;
            break;
        }
    }
    
    if (fileUploadItem != null) {
        // ... qui hai il tuo item, fai tutto il resto ...
    } else {
        // ... errore, es. cambiato per sbaglio il name del campo o altro ...
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    risolto cosi

    Codice PHP:

    while(itr.hasNext()) {
                        
    FileItem item = (FileItemitr.next();  
                        
                        if(!
    item.isFormField()) {                        
                            
    File fullFile  = new File(item.getName()); 
                            
    File savedFile = new File(getServletContext().getRealPath("/"), fullFile.getName());
                            
                            
    //out.println(savedFile.exists());  true è presente, false non c'è
                            
                            
    if (savedFile.exists()){
                                
    out.println("Already exists a file with this name. Move back to upload a file with differet name.");
                            }
                            else{
                                
    item.write(savedFile);
                                
    stmt.executeUpdate("INSERT INTO listafile (UppatoDa,NomeFile) VALUES ('"+user+"','"+item.getName()+"' ) ");
                                
    out.println("File saved.");                           
                                
    out.println(user);
                            }
                        } 
                    }
    //fine while 

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.