Originariamente inviato da giando877
Suddividerei il problema in 3 parti : Upload del file, memorizzazione del file, recupero dell'immagine dal server per la visualizzazione sul client
Upload del file
Questa è la parte più semplice, l'unico requisito è che se il tuo utente ha già compilato metà del form di registrazione non perda i dati. Gli approcci sono 2 : a) usi il classico controllo, che però porterà ad un postback sincrono. Per ovviare la perdita del data entry puoi far effettuare l'upload da un Popup oppure ripopolare tu i controlli dopo l'upload ( lì dove il view state non ci pensa già lui ); oppure usi l'AsyncFileUpload come si vede qui
http://www.asp.net/ajax/ajaxcontrolt...ileUpload.aspx
Memorizzazione del file
Secondo me questa va messa in cache all'IIS, questo perché la cache, a differenza della sessione, resta comune a tutte le applicazioni ed a tutte le chiamate. Agli elementi di cache puoi dare una vita massima, quindi se l'utente non completa la registrazione non ti resterà memoria occupata in eterno.
Recuperato il Binario ti basterà fare una
Dim img() As Byte = CType(Cache.Item(SessionID), Byte())
Cache.Insert(SessionID, img, Nothing, DateTime.UtcNow.AddMinutes(15), TimeSpan.Zero)
per avere l'immagine in cache per 15 minuti
Recupero per la visualizzazione sul cliente
Devi creare una pagina aspx ( ho un Handler, se hai dimestichezza )
Questa pagina dovrà semplicemente recuperare il binario dalla cache ed esporlo, ovvero una cosa simile a questa pagina GetImage.aspx
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Dim SessionID As String = Session.SessionID
Dim img() As Byte = CType(Cache.Item(SessionID), Byte())
Response.Clear()
Response.ContentType = "image/jpeg"
Response.AddHeader("Accept-encoding", "")
Response.BinaryWrite(img)
Response.Flush()
End Sub
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
Nella tua pagina di registrazione dovrà trovarsi un img avente src="GetImage.aspx".
Nel caso di postback sincrono per il caricamento dell'immagine dopo aver ricaricato la pagina il browser tenterà il recupero dell'immagine dal server, quindil l'img rimasta vuota sarà ora popolata con quanto caricato sul server.
Se l'upload è stato asincrono dubito che l'immagine si aggiorni automaticamente. Per ovviare basta intervenire via JS.
A valle del caricamento dovrebbe bastare
var i = $get('miaImg')
i.src = i.src
FINITO!!!!
Ammetto che non è cosa semplice, ma qualcuno di voi pensava di aver scelto un mestiere semplice?!?!!?