Realizzare un ciclo visualizzando in miniatura le immagini di una cart...

sabato 24 maggio 2008 - 14.11

cesconix Profilo | Junior Member

Salve a tutti,
come da titolo devo realizzare un ciclo in modo tale che nella mia pagina aspx si visualizzino tutte le immagini di una cartella in miniatura. Ho visto il tip da voi in cui adesso c'è la possibilità di creare on-the-fly le thumb delle immagini.

in fondo al listato del tip c'è l'istruzione pictureBox1.Image=myThumbnail ma mica posso creare una pictureBox nella mia pagina web,al massimo una Image. Come aggancio quindi myThumbnail?

freeteo Profilo | Guru

ciao,
la cosa è fattibile usando un repeater, dove il corpo del ItemTemplate è un tag "img" che richiama l'HttpHandler che genera la thumb in base ad un valore passato.
Quest'ultimo valore è il file fisico su disco, recuperato con una semplice "GetFiles" del namespace System.IO.Directory del framework.

Il codice è abbastanza semplice, si compone del file "Thumbs.ashx" (l'httphandler appunto) e la pagina con il repeater:

--- Thumbs.ashx:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

--- Pagina.aspx:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

L'esempio è stato fatto con FileInfo al posto del solo nome del file in stringa, questo per visualizzare anche le dimensioni...ma è uguale il concetto anche se lavori con la sola stringa del nome come ti dicevo prima.
Poi la thumb è di 100x100, si presuppone che siamo nella stessa dir, e che voglio i file ".jpg", insomma c'è da adattare alla tua situazione, ma è facile da fare dopo il copia-incolla.

Da notare il tag "img" nel repeater che viene costruito per creare la querystring che arriva all'handler che recupera la variabile "file" che serve ad identificare il file su disco.


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

cesconix Profilo | Junior Member

Grazie! Intanto ci studio un pò... Ancora sono alle prime armi...

freeteo Profilo | Guru

>Grazie! Intanto ci studio un pò...
ok

>ma non avresti qualcosa di più semplice? Ancora sono alle prime armi...
sinceramente mi sembra semplice, tu crei una lista (con il repeater) di "img" (crei il tag nel ItemTemplate) con i file della cartella (GetFiles(..) di .net ).
Questa lista chiama il tuo generatore di thumbnail al posto di chiamare dritto il file su disco, il quale fa la thumb e te la ritorna in uscita (outpustream), questa essendo messa come "src" del tag "img" visualizza il file immagine come fosse un file su disco.

Per fare queste cose dinamiche e "agili" non vedo altra soluzione più semplice.

ps: se crei i 2 file facendo copia-incolla sulla tua dir delle immagini va, non occorre che tu faccia niente, se non adattare qualche riga di codice, ma poca cosa.

Se trovi difficile anche queste operazioni, tipo ad esempio non ti è chiaro il "repeater", o l'httpHandler, o il tag "<%# ..%>" etc...allora devi partire prima con il studiarti 1po di asp.net, trovi tante guide online,quickstart, e video "how-to".
Puoi partire da quelle, e meglio ancora se ti prendi un libro (meglio se ms press così sei sicuro della fonte) e te lo leggi per capire le basi.
Dopodichè tutto ti verrà chiaro, compreso il mio esempio

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

cesconix Profilo | Junior Member

Ok, ho inserito sia il Thumb.ashx che il Repeater nella pagina aspx. Ma non mi visualizza nulla.

freeteo Profilo | Guru

>Ok, ho inserito sia il Thumb.ashx che il Repeater nella pagina
>aspx. Ma non mi visualizza nulla.
nella dir dove hai questi file, ci sono delle immagini ".jpg" ? perchè se guardi il codice, nel load della pagina.aspx, c'è il codice per caricare questi file dal disco e darli al repeater come "DataSource"...

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

cesconix Profilo | Junior Member

Ok, non mi visualizza però l'immagine, ma al suo posto mi mette il nome del file. Guarda un pò l'output:
<div class="foto" > <img alt="immagine.jpg" src="Thumbs.ashx?file=immagine.jpg" /> <br/>54777-1.jpg <br/>Size:54961 </div>

Ecco cosa mi visualizza:
immagine.jpg immagine.jpg Size:54961

Non mi appare l'immagine.

cesconix Profilo | Junior Member

Risolto, sbagliavo a chiamare Thumbs.ashx in Thumb.ashx

cesconix Profilo | Junior Member

Se vorrei che al click del mouse sulla thumb, mi spuntasse grande di sotto come dovrei fare?
Ho pensato di sostituire dentro il Repetaer, il tag img e mettere al suo posto una ImageButton e all'esterno del Repeater una Image, in modo tale che ad ogni ImageButton assegno ImageUrl differenti per ogni file e al click dello stesso cambio l'imageurl dell'Image esterna. Com'è come idea?

freeteo Profilo | Guru

>Se vorrei che al click del mouse sulla thumb, mi spuntasse grande
>di sotto come dovrei fare?
>Ho pensato di sostituire dentro il Repetaer, il tag img e mettere
>al suo posto una ImageButton e all'esterno del Repeater una Image,
>in modo tale che ad ogni ImageButton assegno ImageUrl differenti
>per ogni file e al click dello stesso cambio l'imageurl dell'Image
>esterna. Com'è come idea?
si può andare bene, attento nella costruzione del tag imagebutton, che non è come un tag html normale, tipicamente i "doppi apici" vanno sostuiti con "apice singolo", e soprattutto attento alla gestione dell'evento lato server.
Cmq si, il concetto è usare un button o un link html dove lavori con queryString della pagina, la cosa è equivalente, vedi come vai meglio tu.

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5