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

    [JDBC/Servlet] Come leggere le immagini da DB?

    Salve,
    ho realizzato un uploadfile (apro nuovi thread perchè le domande sono diverse anche se l'esercizio è lo stesso). Funziona, me li carica nel DB. Ora vorrei vedere queste immagini, per la precisione una tabella con i collegamenti alle immagini del database.
    Con una servlet a parte riesco a leggere le immagini...ma non so unire i le due cose in un'unica classe! VVoVe:
    Sorvolando sul codice per l'upload di file nel DB, vorrei vedere una tabella con i collegamenti alle immagini che quando ci clicco mi visualizza l'immagine...quindi (e qui sta il problema):
    Codice PHP:
    ResultSet rs;
    PreparedStatement ps1 conn.prepareStatement("select Nome, Img from Immagini");
    rs ps1.executeQuery();
                                
    out.println("<TABLE BORDER=\"2\">");
    while(
    rs.next()){
        
    int numeroColonne rs.getMetaData().getColumnCount();
        for(
    int i 1<= numeroColonnei++){
           
    out.println("<TR>");
           
    out.println("<TD>");
           
    out.println("<A HREF=\" " +rs.getBlob("Img") +" \"> ");     // Qui sta l'errore!!!
           
    out.println(rs.getString("Nome"));
           
    out.println("<A>");
           
    out.println("</TD>"); 
           
    out.println("<TD>");
           
    out.println("</TD>");
           
    out.println("</TR>");
        }
     }
     
    out.println("</TABLE>"); 
    In una servlet a parte sono riuscito a visualizzare le immagini, cioè:
    Codice PHP:
    String SQL =
                    
    "SELECT Img " +
                    
    "FROM immagini " +
                    
    "WHERE idImmagini = '1'";
     
    ResultSet rs stmt.executeQuery(SQL);
    rs.next();
     
    Blob blob null;
    blob rs.getBlob("Img");
    response.setContentType("image/jpeg");
                
    InputStream in blob.getBinaryStream();
    OutputStream out response.getOutputStream();
    int b;
    while ((
    in.read()) != -1) {
           
    out.write(b);

    Un problema sicuramente è il setContentType che nella mia servlet per l'upload è settato a html mentre per le immagini dovrebbe essere di tipo img...ma mica ne posso avere due di contentType? Non penso...
    Spero di essere stato chiaro,

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

  2. #2
    Ti posto la soluzione che ho usato tempo fa io, con l'unica differenza che la mia immagine è presa da file, ma puoi facilmente adattare il tutto alla tua situazione. Innanzitutto il link che devi creare è una cosa del genere:

    Clicca


    Cliccando sul link parte la servlet all'interno della quale prelevo il nome dell'immagine e la spedisco in out:

    Codice PHP:
    ServletOutputStream sos response.getOutputStream();
    response.setContentType("text/html;charset=UTF-8");
            
    try {
         
    File f = new File("C:\\\\Fotografie\\\\"+request.getParameter("nome"));
         
    JPEGImageDecoder decoder JPEGCodec.createJPEGDecoder(new FileInputStream(f));
         
    BufferedImage image =decoder.decodeAsBufferedImage() ;

         
    JPEGImageEncoder encoder JPEGCodec.createJPEGEncoder(sos);
         
    encoder.encode(image);
    }catch(
    Exception ex){
                
    ex.printStackTrace();
    } finally { 
              
    sos.close();

    Tu poi sostituire il parametro nome con l'id che identifica l'immagine nel tuo DB.
    Al mio segnale... scatenate l'inferno!

  3. #3
    Anzitutto grazie della risposta.
    Funziona...ma in parte
    Ti spiego, a prescindere da dove clicco vedo sempre la prima immagine che ho inserito nel database.
    Allora, ho due classi: una per l'upload file nel database ed un altra (diversa dalla tua) che visualizza i dati nel database. Entrambe, separatamente, funzionano.
    Ora per passare l'id dell'immagine dalla Servlet FileUpload a ServletViewer ecco come faccio:

    FileUpload.java:
    Codice PHP:
    PreparedStatement ps1 conn.prepareStatement("select idImmagini, Nome from immagini");
    rs ps1.executeQuery();
       ...
       
    out.println("<A HREF=\" " +"./ServletViewer?idImmagini=idImmagini" +" \"> ");
       
    out.println(rs.getString("Nome"));
       
    out.println("<A>");
       ... 
    ServletViewer.java:
    Codice PHP:
    String SQL =  "SELECT Img " +
                          
    "FROM immagini " +
                          
    "WHERE idImmagini = " +request.getParameter("idImmagini");
    // Il resto e' identico alla classe postata prima 
    Secondo te perchè mi visualizza sempre un link alla prima immagine del DB? Cosa sbaglio?

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

  4. #4
    Auto-Reply

    Nel FileUpload.java mettevo
    Codice PHP:
    PreparedStatement ps1 conn.prepareStatement("select idImmagini, Nome from immagini");
    ...
    out.println("<A HREF=\" " +"./ServletViewer?idImmagini=idImmagini" +" \"> "); 
    ... 
    E giustamente si prendeva solo il primo ID che passava poi all'altra Servlet.
    Invece devo fare:
    Codice PHP:
    out.println("<A HREF=\" " +"./ServletViewer?idImg=" +rs.getInt("idImmagini") +" \"> "); 
    Errore di distrazione
    Ora devo solo risolvere il problema che nella tabella con i collegamenti mi mette sempre un doppione....cioè due voci uguali collegate alla stessa immagine...sicuramente sbaglierò qualcosa nella costruzione della tabella.

    Grazie cmq sei stato gentilissimo

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

  5. #5
    PS: Messaggio per i posteri. L'errore nella visualizzazione della tabella era il ciclo for interno al while che è inutile
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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

    Re: [JDBC/Servlet] Come leggere le immagini da DB?

    Originariamente inviato da matthew80
    Un problema sicuramente è il setContentType che nella mia servlet per l'upload è settato a html mentre per le immagini dovrebbe essere di tipo img...ma mica ne posso avere due di contentType? Non penso...
    Ma il concetto è diverso. Prima il browser fa una request al server per ottenere una pagina html poi fa ulteriori request per ottenere ognuna delle immagini ecc....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.