348 messaggi dal 10 marzo 2013
Lo so, sono impertinente e pesante.

Nella mia appilcazione ho bisigno di gestire delle foto da abbinare ( scusate il termine poco informatico) agli utenti. in pratica quando andro a stampare il brevetto questo dovra riportare anche una foto di riconoscimento.

la mia applicazione recupera i dati da un database, nel quale piu o meno ho capito come memorizzare il dato (Varbinary max)correggetemi se sbaglio. Il punto e': da dove parto per far si che l'utente carichi l'immagine frugando nel suo hdd , e magari vederne un' anteprima? ovviamete la foto puo avere sia delle dimensioni che un formato obbligato.
Sto sperimentando i controlli AjaxFileupload e AsincFileupload.
ma non ho capito granche. Riesco ad entrare nell Hdd ma non a caricare l'immagine.

Grazie e tutti.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Mario,
il browser non ti consente di esplorare l'hard disk dell'utente alla ricerca di file, sarebbe una violazione della sua privacy. Di conseguenza, solo l'utente può decidere se e quando andare a selezionare la propria foto. Tu puoi renderglielo possibile con un campo <input type="file" o un controllo <asp:FileUpload che aggiungi alla pagina ASP.NET.

L'anteprima della foto è possibile solo dopo che l'utente l'ha selezionata, e la puoi realizzare mediante la File API di HTML5. Ne puoi vedere un esempio qui:
http://www.onlywebpro.com/2012/01/24/create-thumbnail-preview-of-images-using-html5-api/
Per ora comunque non mi preoccuperei di questa cosa. Penso che per il momento sia più prioritario far funzionare il caricamento della foto.

Dopo che l'utente avrà selezionato una foto, la potrà inviare al server cliccando un bottone presente nel tuo form. Tu dovrai raccogliere i dati binari della foto, ridimensionarla (perché non possiamo aspettarci che l'utente abbia fornito una foto delle esatte dimensioni che ti servono), e poi inserirla nel database.

A proposito del caricamento e del successivo ridimensionamento, trovi un articolo completo qui.
http://www.dotnethelpers.com/Ultimate_Image_Resizer/AspDotNet_Sample

ciao,
Moreno
Modificato da BrightSoul il 29 ottobre 2014 08.17 -

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
il problema dell'upload l'ho risolto. Ma non ho capito come fare per scrivere nel data base il percorso della foto anziche il nome.
mi dai una dritta? Grazie

Ti posto un po dicodice:

Protected Sub btnNew_Click(sender As Object, e As EventArgs) Handles btnNew.Click

Dim saveDir As String = "\FotoTessera\"
Dim appPath As String = Request.PhysicalApplicationPath
If (FileUpload1.HasFile) Then
Dim savePath As String = appPath + saveDir + _
Server.HtmlEncode(FileUpload1.FileName)
FileUpload1.SaveAs(savePath)
End if

<asp:FileUpload ID="FileUpload1" runat="server" imageUrl='<%# String.Format("Professional.aspx?IdProfessional={0}", Eval("FotoTessera"))%>' />

Non c'è ancora il resize delle foto.
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Mario,
penso che il nome sia sufficiente, tanto poi il percorso completo puoi sempre ricostruirlo nel momento in cui vai a visualizzare l'immagine.

Altra questione che riguarda questo codice:
Dim savePath As String = appPath + saveDir + _
Server.HtmlEncode(FileUpload1.FileName)

Fai attenzione perché se prendi per buono il Filename originale c'è rischio che un utente sovrascriva la foto di un'altro.
Se due utenti caricano un file chiamato foto.jpg, il primo file verrà sovrascritto dal secondo.

Al nome del file, aggiungi magari l'ID dell'utente o qualche altro valore che distingua gli utenti univocamente.
Oppure, verifica che una foto con quel nome non esista già dentro la cartella FotoTessera perché, se esiste, dovrai cambiarne il nome finché non ne trovi uno libero da usare.

ciao,
Moreno
Modificato da BrightSoul il 29 ottobre 2014 21.24 -

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Ciao Moreno.
In che modo posso aggiungere l'id al filename ?
Perche laddove l'utente non da la foto da stampare devo mettere un logo che è uguale per tutti , io la sto gestendo come foto.
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
puoi semplicemente concatenare il nome della foto all'id del soggetto con l'operatore +.
Dim idSoggetto = ... 'qui recuperi l'id del soggetto e lo assegni ad una variabile

Dim fileName = idSoggetto.ToString() + "-" + Server.HtmlEncode(FileUpload1.FileName)
Dim savePath As String = Path.Combine(appPath, saveDir, fileName)


Oiram ha scritto:

Perche laddove l'utente non da la foto da stampare devo mettere un logo che è uguale per tutti

Lascia pure che il campo del database sia vuoto, quando l'utente non ha fornito l'immagine.
Quando devi visualizzare il brevetto, controllerai se il campo contiene il nome di un'immagine. Se non lo contiene, allora userai il nome del logo uguale per tutti.
Dim nomeImmagine = ... ' qui recupero il nome dell'immagine dal db
If String.IsNullOrEmpty(nomeImmagine) Then
  nomeImmagine = "logoUgualePerTutti.jpg"
End If


ciao,
Moreno

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Ciao Moreno
Questo e' il codice modificato come da te suggerito, anche se credo i avere sbagliato qualcosa , quando vado a concatenare l'idsoggetto con la foto la dove c'e' PATH.COMBINE mi restituisce il seguente errore:
'Path e' ambiguo ed e' importato dagli apszi dei nomi o dai tipi 'system.IO, System.Web.HttpCookie'.

Dove sto sbagliando? Grazie 1000


Dim saveDir As String = "\FotoTessera\"
Dim appPath As String = Request.PhysicalApplicationPath
Dim idProfessional As String = Request.QueryString("idProfessional")
Dim queryString As String = "Select * from T_Professional WHERE idProfessional = " & idProfessional
Dim cmd As New SqlCommand(queryString, conn)
conn.Open()
If (FileUpload1.HasFile) Then
Dim FileName = idProfessional.ToString() + "-" + Server.HtmlEncode(FileUpload1.FileName)
Dim savePath As String = Path.Combine(appPath, saveDir, FileName)
Dim fileSize As Integer = FileUpload1.PostedFile.ContentLength
If (fileSize < 5100000) Then
FileUpload1.SaveAs(savePath)
End If
End If
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,

Oiram ha scritto:

Path e' ambiguo ed e' importato dagli apszi dei nomi o dai tipi 'system.IO, System.Web.HttpCookie'.

Questo avviso significa che Path è il nome di una classe presente in due namespace diversi. Il compilatore non sa quale scegliere, quindi devi essere tu ad indicarglielo esplicitamente. Scrivi così:
Dim savePath As String = System.IO.Path.Combine(appPath, saveDir, FileName)


Ti ho fatto usare il metodo Combine per concatenare i vari frammenti di un percorso perché è un metodo da preferire rispetto all'operatore +. Tra le altre cose - aggiunge il carattere separatore quando necessario e rimuove quelli superflui.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.