Salvare immmagine su db

lunedì 19 gennaio 2009 - 15.33

bolla111 Profilo | Senior Member

ciao a tutti....
nella mia applicazione uso un controllo fileupload e questo codice x fare l'upload di un immagine:

Dim File_sent As HttpPostedFile = postedfile.PostedFile
Dim file_size As Integer = File_sent.ContentLength

If Not File_sent Is Nothing Then

If file_size > 0 Then

Dim dati() As Byte
ReDim dati(file_size)

File_sent.InputStream.Read(dati, 0, file_size)
Dim filename As String = File_sent.FileName

Dim fs As New FileStream("C:\\" + Path.GetFileName(filename), FileMode.Create)
fs.Write(dati, 0, file_size)
fs.Close()

End If

End If


Ora come faccio a salvare la path della mia immagine in una colonna di una tabella di database sql server e l'immagine stessa in una cartella?
Grazie...

rossimarko Profilo | Guru

Ciao,

non so se ho capito bene la richiesta, ma da quanto vedo l'immagine l'hai gia salvata con questo pezzo di codice:

Dim fs As New FileStream("C:\\" + Path.GetFileName(filename), FileMode.Create) fs.Write(dati, 0, file_size) fs.Close()

Per quanto riguarda il path basta che prendi quello in cui hai salvato il file ("C:\\" + Path.GetFileName(filename)) e lo memorizzi in una colonna del db come faresti con qualsiasi altro campo di tipo stringa..


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

si hai ragione...è la path che devo salvare su un db...solo che non so che tipo di campo mi conviene usare...in + devo fare in modo che riesca a caricare la colonna path su un gridview in modo tale da poterla usare come link per visualizzare l'immagine, oppure caricare il gridview mostrando all'istante l'immagine...come?

rossimarko Profilo | Guru

Il path lo devi salvare in una colonna di tipo testo perchè comunque è una stringa.

Io ti consiglio di fare così:
- crea una pagina che si occupa della sola visualizzazione dell'immagine
- a questa pagina passerai come parametro nel querystring l'id del record del db che contiene l'immagine
- all'interno della pagina caricherai con uno stream il contenuto dell'immagine e farai la response dell'array di byte

In questo modo nella tua griglia quando dovrai visualizzare l'immagine basterà creare l'url "VisualizzaImmagine.aspx?ID=22" e automaticamente la pagina caricherà i dati.

Ti dico questo perchè se il path dell'immagine non è sotto la cartella del sito web non potrai accederci direttamente con un semplice ImageUrl="Cartella\Immagine.jpg", mentre con la pagina potrai accedere anche a cartelle che stanno fisicamente in un altra struttura o in un path di rete (ovviamente devi avere i permessi).

PS: al posto della pagina puoi usare un httphandler, ma inizialmente la pagina è più semplice da gestire.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

ok...ascolto il tuo consiglio...
ancora una cosa...prima ti ho postato il codice che ho usato x caricare un immagine in una cartella...qual'è il codice x cancellarla?

rossimarko Profilo | Guru

Puoi usare il metodo Delete della classe IO.File: http://msdn.microsoft.com/en-us/library/system.io.file.delete.aspx
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

ok...grazie
c'è solo una cosa che non mi è chiara nell'esempio: perchè prima di cancellare fa quella copia?

Jeremy Profilo | Guru

E' solo un esempio per testare i vari metodi

bolla111 Profilo | Senior Member

capisco...
cmq ho acora qualche dubbio su come realizzare quello che chiedevo al'inizio...
cioè: nel gridview io volevo creare una colonna contenente un link che direziona alla pagina x la visualizzazione dell'immagine (passando l'ID); però se non è assegnata alcuna immagine ad un determinato record, vorrei che il campo del link rimanesse vuoto...è possibile?
che tipo di campo mi conviene utilizzare (hyperlinkfield, templatefield contentente un link button, ...)?
inoltre nella colonna contenente il link, come testo, mi conviene visualizzare per esempio "apri immagine", il nome del file oppure la path completa? consiglio?
grazie...

rossimarko Profilo | Guru

Da codice utilizzando l'evento RowDataBound (http://msdn.microsoft.com/it-it/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx) puoi gestire la visualizzazione o meno del link. Io ti suggerisco di usare un TemplateField con un linkbutton e poi da codice gestisci la visualizzazione o meno del link a seconda del fatto che il campo su db sia popolato.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bolla111 Profilo | Senior Member

Possibile che le guide di msdn siano le + difficili da capire?
allora...spiego a te perchè faccio prima...io ho la path della mia immagine in una tabella di database che carico in un gridview tramite sqldatasource...
ma il campo contenente la path non lo devo caricare cosi giusto? devo caricarlo tramite codice...quello che ho intenzione di fare è di caricarlo nell'evento page load e fare il controllo che mi verifica se quel campo è popolato o meno...se è popolato devo rendere visibile il link button...ma non capisco bene come si faccia il tutto...o meglio...è la prima cosa che non mi è molto chiara...non riesco ad arrivarne a capo...mi serve una spinta..

rossimarko Profilo | Guru

Io ti suggerisco di caricare anche il path nel datasource che passi alla griglia.

Nella griglia metti il link alla pagina di visualizzazione dell'immagine con l'id del record, poi nel rowdatabound gestisci la visualizzazione o meno del link in base al contenuto del campo che contiene il path. Se è vuoto nascondi il link, altrimenti lo lasci visibile.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5