Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63

    [Servlet]Upload File e relativo inserimento in un Db

    Spero di essere nella sezione giusta

    Vi spiego subito il mio problema.
    Ho creato una servlet, all'interno della quale ho una form

    Codice PHP:
    "<form enctype=multipart/form-data action=AggiuntaFile method=POST>"
                        
    " <fieldset>"
                        
    "<legend>Dati documento</legend>"
                        
    "<div> <label>Nome documento:</label> <input name=nomeDoc type=text> </div>"
                        
    "<div> <label>Documento:</label><input type=file name=documento> </div>"
                        
    "<input type=hidden name=user value='"+user+"'>"
                        
    "<input type=submit value=Aggiungi File></input>"
                        
    "</fieldset>"
                        
    "</form>" 
    la form è molto semplice. inserisco il nome del documento e poi seleziono il documento che voglio uppare. Successivalmente al click del pulsante Aggiungi mi sposto in un'altra servlet (AggiuntaFile) ed è qui che ho problemi.

    In pratica devo recuperare il documento per poterlo inserire in una tabella del mio Database.
    Di solito senza campi di tipo "type=file" faccio

    Codice PHP:
            String nomDoc request.getParameter("nomeDoc"); 
    ma in questo caso con il documento non so come fare.

    Successivamente al recupero del file devo quindi procedere all'inserimento dello stesso nella mia tabella

    Codice PHP:
    stmt.executeUpdate("INSERT INTO "+user+" (Nome,Lavorato,Documento) VALUES ('"+nomDoc+"','no','') "); 
    Come fare ?!

    ps: il documento deve essere un file Excel

    attendo le vostre rispsote

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non lo puoi fare usando gli strumenti del core di J2EE (ovvero, le semplici HttpServletRequest). Devi adottare delle librerie di terze parti per il corretto trattamento delle richieste multipart.

    Cerca nel forum, ne sono state elencate diverse: Apache Commons FileUpload, O'Reilly Servlets, ecc.

    Per quanto riguarda l'inserimento dei dati nel DB, consiglio di sfruttare i PreparedStatements e i campi di tipo BLOB per i dati binari.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    io avevo fatto alcune ricerche e avevo trovato un codice per l'upload e inserimento nel Db del file, l'ho modificato per come serviva a me e questo è il risultato


    Codice PHP:
     try {
                
    // Apache Commons-Fileupload library classes
                
    DiskFileItemFactory factory = new DiskFileItemFactory();
                
    ServletFileUpload upload  = new ServletFileUpload(factory);

                if (! 
    ServletFileUpload.isMultipartContent(request)) {
                    
    System.out.println("sorry. No file uploaded");
                    return;
                }
                
    String user request.getParameter("user");
                List 
    items upload.parseRequest(request);
                
                
    FileItem nome = (FileItemitems.get(0);
                
    String nomeD nome.getString();
                
                
    FileItem username = (FileItemitems.get(1);
                
    String userN username.getString();        
                
                
    FileItem file = (FileItemitems.get(2);
                
                
    String lavoro ="no";
                
                Class.
    forName("com.mysql.jdbc.Driver");
                
    String connectionUrl "jdbc:mysql://localhost/test?" "user=root&password=";
                
    Connection con DriverManager.getConnection(connectionUrl);
                
    con.setAutoCommit(false);
                
                
    PreparedStatement ps con.prepareStatement("INSERT INTO '"+user+"' VALUES (?,?,?) ");
                
    ps.setString(1nomeD);
                
    ps.setString(2"no");
                
    ps.setBinaryStream(3file.getInputStream(), (int) file.getSize());
                
    ps.executeUpdate();
                
    con.commit(); 
    purtroppo come risultato ho questo errore

    Codice PHP:
    ERRORE SE UPPO UNA FOTO
    SQLException
    You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near ''null' VALUES ('Prova','no',_binary'Ã&#65533;Ã�ࡱá\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0' at line 1 

    Codice PHP:
    ERRORE SE UPPO UN TXT
    SQLException
    You have an error in your SQL syntaxcheck the manual that corresponds to your MySQL server version for the right syntax to use near ''null' VALUES ('Prova','no',_binary'')' at line 1 

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    L'errore te lo sta dando MySQL ed è chiaro: stai cercando di costruire l'istruzione SQL, ma la variabile "user" è nulla. Di conseguenza, la tua SQL sarà:

    codice:
    INSERT INTO 'null' VALUES( ... )
    Questo accade perchè stai cercando di prelevare il valore del parametro "user" dalla Request semplice, ma, come già detto, non lo puoi fare. Devi wrappare la HttpServletRequest in un oggetto della libreria che stai usando (io non l'ho mai usata, quindi al momento non so come si chiami la classe) e poi usare quest'ultimo oggetto per reperire tutti i parametri.

    Tra parentesi, i nomi delle tabelle non andrebbero messe tra apici, ma è un altro discorso.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    ho cambiato in

    Codice PHP:
     PreparedStatement ps con.prepareStatement("INSERT INTO primoutente VALUES (,,) "); 
    e l'errore ora è

    SQLException: Parameter index out of range (1 > number of parameters, which is 0).

    questa è la tabella


  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E che senso dovrebbe avere questa query?

    codice:
    INSERT INTO primoutente VALUES (,,)
    Non hai specificato alcun parametro (con il punto di domanda), quindi non puoi assegnare alcun valore ai parametri (visto che non ne hai) quindi che vorresti inserire?

    Se leggi bene il testo del messaggio, è quanto di più chiaro si possa volere:

    SQLException: Parameter index out of range (1 > number of parameters, which is 0).
    Indice del parametro fuori intervallo (1 > di numero di parametri, che sono 0).

    Stai cercando di assegnare un valore al parametro 1, ma, come detto, non hai specificato nessun parametro.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    i 3 parametri li setto dopo

    Codice PHP:
    PreparedStatement ps con.prepareStatement("INSERT INTO '"+user+"' VALUES (,,) );     
    //primo parametro       
    ps.setString(1, nomeD);  
              
    //2nd parametro
    ps.setString(2, "
    no");             

    //terzo parametro ke dovrebbe essere il documento 
    ps.setBinaryStream(3, file.getInputStream(), (int) file.getSize());             
    ps.executeUpdate(); 

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da mauc
    i 3 parametri li setto dopo

    Codice PHP:
    PreparedStatement ps con.prepareStatement("INSERT INTO '"+user+"' VALUES (,,) );     
    //primo parametro       
    ps.setString(1, nomeD);  
              
    //2nd parametro
    ps.setString(2, "
    no");             

    //terzo parametro ke dovrebbe essere il documento 
    ps.setBinaryStream(3, file.getInputStream(), (int) file.getSize());             
    ps.executeUpdate(); 
    Sì, questo s'era capito... solo che non lo puoi fare se non glieli dici nell'istruzione SQL. Questa è la forma corretta (guarda la parte in grassetto):

    codice:
    PreparedStatement ps = con.prepareStatement("INSERT INTO '"+user+"' VALUES (?,?,?)" );
    A ciascun punto di domanda corrisponde un parametro, che poi setterai.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    63
    è andata.

    Solo che mi salva nel db tutto, ma se apro un file excel che ho salvato non me lo apre...

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Cioè? In che modo cerchi di aprire il file Excel?
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.