Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [JSP] Visualizzare immagini di una directory

    Ciao a tutti,
    nella mia webapp ho inserito la possibilità per l'utente di "uploadare" immagini in una sua cartella personale.
    La pagina JSP che gestisce l'upload fa anche il "listing" dei file immagine contenuti nella cartella dell'utente.
    I problemi che ho sono 2:
    1) quando l'upload dell'immagine termina la pagina JSP si ricarica ma nel "listing" della directory l'immagine appena caricata non viene visualizzata (mentre le altre sì) ma compare il suo box "segnaposto". Infatti l'html per l'immagine in questione viene generato ma sembra che "l'immagine non sia fisicamente disponibile nel contesto del WebServer (Tomcat)".
    La nuova immagine viene caricata solo rifacendo il deploy dell'applicazione... e quindi mi viene da pensare che l'immagine venga caricata nel contesto del webserver e risulta quindi disponibile. Sbaglio? Come posso "sincronizzare" le cartelle?

    2) ogni utente può "uploadare" immagini di qualsiasi dimensione (in pixel!)... quando vado a visualizzare le immagini dell'utente mi è difficile creare un layout che possa contenere img di svariate misure (per assurdo una da 800x600 e una 20x30!!!)... quindi chiedo: esiste un modo Java Servlet/JSP per fare il resizing delle immagini prima di visualizzarle? Non chiedo cose complicate... mi basterebbe solo sapere altezza e larghezza dell'immagine per andare poi a visualizzarla "scalata" tramite gli attributi 'height' e 'width' di img. (sò che il risultato sarà mediocre ma per iniziare va bene).
    Anche un metodo clientSide con Javascript potrebbe andar bene... ma forse non è il forum adatto!

    Posto un pò di codice... magari può servire a qualcuno in futuro e aiuta a capire quanto detto:
    codice:
    //Filtrare lista file (toglie le directory e file thumbs.db)
            FilenameFilter filter = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                     boolean flag = false; 
                     File file = new File ( dir,name ) ; 
                     if  (file.isFile()){  
                         flag = true;
                         if (name.endsWith ( ".db" ))
                             flag = false;
                     }  
                     return flag; }
            };  
            // Lista immagini della directory dell'utente
    	String[] userFileList = userFolder.list(filter);
            
            // Bean Gestore dell'upload
            UploadBean upBean = new UploadBean();
            upBean.setFolderstore(userFolderPath);
            upBean.setOverwrite(true);
            upBean.setWhitelist(whiteList);
            upBean.setFilesizelimit(3145728);
    
    /****** ... *******/
    
    <form method="post" action="imageUpload.jsp" name="upform" enctype="multipart/form-data">
    					<input type="file" name="uploadfile" size="40" onchange="preview(this)">
    					<input type="hidden" name="todo" value="upload">
    					
    
    
                                            <input type="submit" name="Submit" value="Upload">
                                            <input type="reset" name="Reset" value="Cancel">
    				</form>
    
    /******** ... ********/
    
    <%if(userFileList!=null)
    		  {
    			for(int i=0; i<userFileList.length; i++)
    			{
    		%>
    			<tr>				
    				<td valign="middle">[img]img/delete.gif[/img]');">[img]<%=ctxUrl%>userImages/<%=userName%>/<%=userFileList[i]%>[/img]<td>
    			</tr>
    		<%}
    			}
            userFileList = null;
            
    %>
    Per l'upload delle immagini uso questo bean: http://www.javazoom.net/jzservlets/u...ploadbean.html
    il migliore che ho trovato fin'ora!

    Alcune precisazioni:
    La userfolder è qualcosa del genere: D:/Progetto/nomeWeb/userImages/nomeUtente
    mentre il src delle immagini nell'htm è: http://localhost:8084/nomeWeb/userIm...e/immagine.jpg

    Scusate il post lungo... grazie a chi risponde!!!

    Bye

  2. #2

    Re: [JSP] Visualizzare immagini di una directory

    Problema 1) risolto... aggiungendo una riga di codice!
    Praticamente faccio il refresh della "userFileList" che rilegge i file della directory.
    In neretto...

    Nessuno ha qualche idea riguardo al problema numero 2) ?

    Grazie.
    codice:
    //Filtrare lista file (toglie le directory e file thumbs.db)
            FilenameFilter filter = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                     boolean flag = false; 
                     File file = new File ( dir,name ) ; 
                     if  (file.isFile()){  
                         flag = true;
                         if (name.endsWith ( ".db" ))
                             flag = false;
                     }  
                     return flag; }
            };  
            // Lista immagini della directory dell'utente
    	String[] userFileList = userFolder.list(filter);
            
            // Bean Gestore dell'upload
            UploadBean upBean = new UploadBean();
            upBean.setFolderstore(userFolderPath);
            upBean.setOverwrite(true);
            upBean.setWhitelist(whiteList);
            upBean.setFilesizelimit(3145728);
    
    /****** ... *******/
    
    <form method="post" action="imageUpload.jsp" name="upform" enctype="multipart/form-data">
    					<input type="file" name="uploadfile" size="40" onchange="preview(this)">
    					<input type="hidden" name="todo" value="upload">
    					
    
    
                                            <input type="submit" name="Submit" value="Upload">
                                            <input type="reset" name="Reset" value="Cancel">
    				</form>
    
    /******** ... ********/
    userFileList = userFolder.list(filter); 
    <%if(userFileList!=null)
    		  {
    			for(int i=0; i<userFileList.length; i++)
    			{
    		%>
    			<tr>				
    				<td valign="middle">[img]img/delete.gif[/img]');">[img]<%=ctxUrl%>userImages/<%=userName%>/<%=userFileList[i]%>[/img]<td>
    			</tr>
    		<%}
    			}
            userFileList = null;
            
    %>

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Per la seconda problematica... mi pare che qui sul forum si sia già parlato di resize di immagini con java. Ci sono diversi possibili approcci e molto dipende da che api puoi installare/hai a disposizione. Attenzione comunque a soluzioni client side... se uno carica 10 file da 20MB e a livello html (quindi quel che vede il client) hai qualcosa del genere:

    codice:
    [img]img_1.jpg[/img]
    ...
    [img]img_10.jpg[/img]
    Ossia "forzi" la larghezza cosicchè il tuo layout venga rispettato, il cient si scaricherà comunque 200MB di roba... il che non è proprio raccomandabile (nemmeno per te, visto che la banda sarà tanta ma non infinita)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Grazie della risposta. Concordo pienamente. Quindi soluzione client-side scartata.
    Il progetto è mio...quindi posso includere qualsiasi libreria utile al caso. Ti assicuro che ho cercato sul forum (..magari male!!! ) ma non ho trovato granchè... se hai qlc link o suggerimento di parole chiavi per la ricerca sono ben accetti!

    Come soluzione tampone pensavo di visualizzare tutte le img sotto forma di icona (di dim fissa)... cioè l'utente capisce che è un'img e se vuole vederla ci clicca sopra e gliela visualizzo con qualcosa tipo LightBox&Co. (http://www.huddletogether.com/projects/lightbox2/).

    Però per fare le cose fatte bene vorrei riuscire a realizzare il resizing server-side delle img. Possibile che nessuno conosca una qlc libreria che tratti le immagini? Cè niente di standard sulle librerie grafiche java? Tipo Awt o SWT(che non conosco e non ho mai usato)?


    Attendo Vs notizie!


    ThanX

    Ciao

  5. #5
    per il ridimensionamento delle immagini puoi usare le BufferedImage e le AffineTransform del package java.awt.image

    codice:
    AffineTransform tx = new AffineTransform();
    double scalex = 0.5;     //dimezziamo l'immagine
    double scaley = 0.5;
    tx.scale(scalex, scaley);
        
    AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
    //bufferedImage rappresenta la tua immagine
    bufferedImage = op.filter(bufferedImage, null);
    Ora non ti resta che salvare l'immagine
    Al mio segnale... scatenate l'inferno!

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

  7. #7

  8. #8
    Ah... dato che ci sei... come creo una BufferedImage a partire da un File file? Ho il path assoluto dell'immagine.

  9. #9
    Mi rispondo da solo:

    Codice PHP:
    String pathFile userFolderPath+"/"+file.getFileName();
    File imageFile = new File(pathFile);
    BufferedImage img null;
    try {
        
    img ImageIO.read(imageFile);
    } catch (
    Exception e) {} 
    Ora procedo con lo scaling...

  10. #10
    Continuo il monologo....
    Allora...dopo alcune prove... sento che siamo quasi alla soluzione definitiva....
    Ora il problema è nel salvataggio delle immagini riscalate... su disco compare un'immagine con il path e il nome impostato ma è vuota...0 byte!!!

    Dove sbaglio? Alternative?
    Non è che java o il web server rimandano la scrittura su disco???
    Io ho bisogno che lo facciano quando chiamo il metodo... perchè subito dopo faccio il listing della directory di immagini e ho bisogno che sia già presente l'immagine scalata per poterla visualizzare!

    Questo il codice usato (con i suggerimenti applicati!):
    Codice PHP:
    String pathFile userFolderPath+"/"+file.getFileName();
                        
    File imageFile = new File(pathFile); 
                        
    BufferedImage img null;
                        
                        
    img ImageIO.read(imageFile);
                        
    AffineTransform tx = new AffineTransform();
    double scalex 0.5;     //dimezziamo l'immagine
    double scaley 0.5;
    tx.scale(scalexscaley);
    AffineTransformOp op = new AffineTransformOp(txAffineTransformOp.TYPE_BILINEAR);
                        
                        
    img op.filter(imgnull);
                        try{
                            
    pathFile userFolderPath+"/2_"+file.getFileName();
                        
    File outputfile = new File(pathFile);
                        
    ImageIO.write(img"gif"outputfile);
                        }catch(
    Exception e){out.print(pathFile+"-Error:"+e.getMessage());} 
    Non ottengo nessuna eccezione nel try/catch.
    Facendo img.getHeight / getWidth ottengo le misure scalate... del 50% come da aspettative.

    Il codice per la scrittura l'ho trovato qui: http://java.sun.com/docs/books/tutor...saveimage.html
    per il momento provo a scrivere solo in gif. I file originali sono anch'essi gif.

    Fatemi sapere.

    Ciao
    Grazie

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.