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

    [JDBC] Per le immagini è obbligatoria una cartella temporanea?

    Salve,

    Ho realizzato una servlet per l'upload delle immagini.
    Copia l'immagine sia nel disco che nel DB ma io vorrei scriverla solo nel database. Se levo l'istruzione che scrive nel disco mi da problemi. Qualche suggerimento?
    Ecco il codice:
    Codice PHP:
    ..
    DiskFileUpload dfu = new DiskFileUpload();

            try {
                List 
    fileItems dfu.parseRequest(req);
                
    Iterator it fileItems.iterator();
                while (
    it.hasNext()) {
                   
    FileItem f = (FileItemit.next();
                       
    File file=new File(getServletContext().getRealPath("/"), f.getName());
                                    
    // Scrittura su disco
                                    
    f.write(file);
                                    
    out.println("File " f.getName() + " salvato in "
                        
    file.getAbsolutePath() + "
    "
    );
                    
    // Scrittura su DB
                    
    Class.forName("com.mysql.jdbc.Driver");
                    
    Connection conn DriverManager.getConnection("jdbc:mysql://localhost/test",
                                          
    "root""root");
                                    
    PreparedStatement ps conn.prepareStatement("insert into immagini values(null, ?)");
                                    
    FileInputStream fis = new FileInputStream(file);
                                    
    ps.setBinaryStream(1fis, (int)file.length());
        
                                    
    ps.executeUpdate();
                                    
    ps.close();
                                    
    conn.close();
                    
                    } 
    PS:Uso le librerie Apache Commons FileUpload

    Grazie dell'attenzione,
    Matteo
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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

    Re: [JDBC] Per le immagini è obbligatoria una cartella temporanea?

    Originariamente inviato da matthew80
    Ho realizzato una servlet per l'upload delle immagini.
    Copia l'immagine sia nel disco che nel DB ma io vorrei scriverla solo nel database. Se levo l'istruzione che scrive nel disco mi da problemi. Qualche suggerimento?
    Premettendo che A) conosco poco JDBC e B) non conosco FileUpload di Apache Commons (sono andato solo ora a leggere online il javadoc), direi che non è affatto necessario scrivere prima il file su disco!!

    Il javadoc di Apache Commons dice che la interfaccia FileItem ha il metodo getInputStream(), per ottenere un InputStream da cui leggere il file uploadato. Bene ... semplicemente passi questo InputStream a setBinaryStream() del PreparedStatement.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie tanto andbin
    Cmq ho visto che usavo classi deprecate quindi mi sono aggiornato
    Ora funziona. Posto il codice perchè può essere utile.
    PS: Ma secondo te l'iterazione è cmq necessaria anche se è un solo file?

    Codice PHP:
    boolean isMultipart ServletFileUpload.isMultipartContent(req);
    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List 
    /* FileItem */ items upload.parseRequest(req);
                          
    Iterator iter items.iterator();
    while (
    iter.hasNext()) {
         Class.
    forName("com.mysql.jdbc.Driver");
         
    FileItem item = (FileItemiter.next();
                               
         
    Connection conn DriverManager.getConnection("jdbc:mysql://localhost/test","root""root");
         
    PreparedStatement ps conn.prepareStatement("insert into immagini values(null, ?)");
            
         
    InputStream uploadedStream item.getInputStream();
         
    ps.setBinaryStream(1uploadedStream, (int)item.getSize());
                               
         
    ps.executeUpdate();
         
    ps.close();
         
    conn.close();

    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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.