Spulciando qui e la, con l'aiuto di alcuni esempi sono riuscito a scrivere (... o meglio adattare...) questo
codice:
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
Label1.Text = "...e attendi..."
' otteniamo il path della cartella principale dell'applicazione
Dim filePath1 As String = Request.PhysicalApplicationPath
'Dim filePath2 As String = ""
Dim filePath3 As String = ""
' aggiungiamo il nome delle nostre cartelle al path
filePath1 = filePath1 & "public/FotoUpload/" 'foto originale per eventuale download
'filePath2 = filePath1 & "public/FotoVedi/" 'foto ridimensionate a 800 px per visualizzarle nel browser
filePath3 = filePath1 & "public/FotoMini/" 'miniatura della foto a 150 px
' controlliamo se il controllo FileUpload1 contiene un file da caricare
If FileUpload1.HasFile Then
' se si, aggiorniamo il path del file
'filePath1 += FileUpload1.FileName
'----------------------------------------------------------------------------------------------
'Ora dobbiamo creare un nome univoco per il nostro file immagine poichè asp.net non controlla se un file è presente
Dim myUValue As String ' nome univoco del file dato dal giorno e ora attuali
Dim myUName As String = "" ' nome univoco del file dato da myUValue ed estensione
Dim annoOra As String = DateTime.Now.Year
Dim meseOra As String = DateTime.Now.Month
If meseOra < 10 Then meseOra = "0" & meseOra 'se il valore è inferiore a 9 aggiungo lo 0 davanti
Dim giornoOra As String = DateTime.Now.Day
If giornoOra < 10 Then giornoOra = "0" & giornoOra 'se il valore è inferiore a 9 aggiungo lo 0 davanti
Dim oreOra As String = DateTime.Now.Hour
If oreOra < 10 Then oreOra = "0" & oreOra 'se il valore è inferiore a 9 aggiungo lo 0 davanti
Dim minutiOra As String = DateTime.Now.Minute
If minutiOra < 10 Then minutiOra = "0" & minutiOra 'se il valore è inferiore a 9 aggiungo lo 0 davanti
Dim secondiOra As String = DateTime.Now.Second
If secondiOra < 10 Then secondiOra = "0" & secondiOra 'se il valore è inferiore a 9 aggiungo lo 0 davanti
myUValue = (annoOra & meseOra & giornoOra & "_" & oreOra & minutiOra & secondiOra)
'il passo successivo è carpire l'estensione del file immagine:
Dim intFileNameLength As Integer
Dim strFileNamePath As String
Dim strFileExtension As String = ""
Dim myFile As Object = FileUpload1.FileName 'nome del file da salvare
If Not (myFile.PostedFile Is Nothing) Then
'Logica per trovare il nome del file caricato escluso il path
strFileNamePath = myFile.PostedFile.FileName
intFileNameLength = InStr(1, StrReverse(strFileNamePath), ".")
strFileExtension = Mid(strFileNamePath, (Len(strFileNamePath) - intFileNameLength) + 2)
'Creiamo il nome unico del file per l'immagine con dimensioni originali
myUName = myUValue & "." & strFileExtension
myFile = myUName ' rinomino il file da salvare
End If
' salviamo il file originale nel percorso calcolato
myFile.SaveAs(filePath1)
'Creiamo quindi una miniatura per quest'immagine con un nome univoco e una misura massima (espressa in pixel)
'Poichè non tutte le immagini che uploadiamo possono essere di forma quadrata, usiamo un po' di matematica
Dim objBMP As System.Drawing.Bitmap
Dim objGraphics As System.Drawing.Image
'Quindi prendiamo delle informazioni importanti:
objBMP = New Bitmap(filePath1 & myUName)
Dim imgw As Integer = objBMP.Width
Dim imgh As Integer = objBMP.Height
'Ora possiamo ridimensionare in scala l'immagine settando una misura massima
'Questa misura è valida sia che l'immagine sia più alta o più lunga.
'La dimensione massima sarà di 150 px di valore.
' Creo la miniatura in scala
Dim maxImage As Integer = 150
Dim newimgw As Integer
Dim newimgh As Integer
If imgw > imgh Then
newimgw = maxImage
newimgh = (imgh * maxImage) / imgw
ElseIf imgh > imgw Then
newimgw = (imgw * maxImage) / imgh
newimgh = maxImage
Else
newimgw = maxImage
newimgh = maxImage
End If
'Ora possiamo creare l'anteprima:
objGraphics = objBMP.GetThumbnailImage(newimgw, newimgh, Nothing, IntPtr.Zero)
'Infine diamogli un nome e salviamola:
objGraphics.Save(filePath3 & myUName) 'myUValue & "tmbnl." & strFileExtension)
'----------------------------------------------------------------------------------------------
' mandiamo un messaggio all'utente
Label1.Text = "IMMAGINE INSERITA"
Else
Label1.Text = "Il file non è stato caricato!"
End If
End Sub
Mi da errore:
Impossibile trovare il membro pubblico 'PostedFile' nel tipo 'String'.
codice:
Riga 57: Dim myFile As Object = FileUpload1.FileName 'nome del file da salvare
Riga 58:
Riga 59: If Not (myFile.PostedFile Is Nothing) Then
Riga 60: 'Logica per trovare il nome del file caricato escluso il path
Riga 61: strFileNamePath = myFile.PostedFile.FileName