Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179

    Rinomina immagine e ridimensiona

    Salve, siccome nei vari forum non riesco a fare quello che vorrei, chiedo aiuto a persone di buon cuore...

    Utilizzo asp.net con VB. Ho questo pezzo di programma che al clic del mouse salva l'immagine originale nella cartella /public/FileUpload e fin qui tutto OK...

    Prima di salvare devo nel seguente ordine:
    - Controllare che sia un'immagine jpg, png, gif...
    - Rinominare il file e salvare nella cartella /public/FileUpload
    - Ridimensionare il file senza perdere proporzioni per creare miniatura e salvarlo nella cartella /public/FileMini

    Qui sotto il codice:
    codice:
    Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
            ' otteniamo il path della cartella principale dell'applicazione
            Dim filePath As String = Request.PhysicalApplicationPath
    
            ' aggiungiamo il nome della nostra cartella al path
            filePath += "public/FotoUpload/"
    
            ' controlliamo se il controllo FileUpload1 contiene un file da caricare
            If FileUpload1.HasFile Then
                ' se si, aggiorniamo il path del file
                filePath += FileUpload1.FileName
    
                ' salviamo il file nel percorso calcolato
                FileUpload1.SaveAs(filePath)
    
                ' mandiamo un messaggio all'utente
                Label1.Text = "IMMAGINE INSERITA"
            Else
                Label1.Text = "Il file non è stato caricato!"
            End If
    
        End Sub
    Grazie mille.

  2. #2

  3. #3
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    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

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Non riesco a capire perche' in alcuni punti del codice usi myFile invece di FileUpload1....

    Ad esempio:

    codice:
     
    Dim myFile As Object = FileUpload1.FileName 'nome del file da salvare
    If Not (myFile.PostedFile Is Nothing) Then
    non dovrebbe essere
    codice:
     
    Dim myFile As String = FileUpload1.FileName.Tostring 'nome del file da salvare
    If Not (FileUpload1.PostedFile Is Nothing) Then
    ...
    ?

  5. #5
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    perchè "myFile.PostedFile" e "myFile.SaveAs(filePath1)" mi dice che non sono membri string.
    Ho provato con
    codice:
    strFileNamePath = System.IO.Path.GetFileNameWithoutExtension(myFile) 'restituisce il nome senza estensione
    strFileExtension = System.IO.Path.GetExtension(myFile) 'restituisce l'estensione del file
    Ma il risultato è che mi salva il nome del file rinominato, ma non è più un immagine

    In pratica, dopo aver creato il nome per rinominare il file come lo salvo lasciando per ora perdere il ridimensionamento? Dovrei usare un save???

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Intendevo dire che il componente non e' myFile ma FileUpload1.

    Il codice piu' semplice dovrebbe essere:
    codice:
     
    ASPX
         Seleziona il file:
         <asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="btnUpload" Text="UPLOAD!" runat="server" />
       
    VB
        Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
            Dim percorso() As String = FileUpload1.PostedFile.FileName.Split("\")
            Dim nomefileupload As String = percorso(UBound(percorso))
    
            FileUpload1.PostedFile.SaveAs("C:\FILES\" & nomefileupload) <--- con permessi di scritt.
        End Sub

  7. #7
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    Fatto grazie. Salva originale nella cartella /public/FotoUpload, rinomina e salva l'immagine ridimensionata di 600 px nella cartella /public/FotoVedi.
    Il problema che quest'ultima è sgranata. C'è un modo per non fargliela rovinare?
    Il pezzo di programa dove ridimensiona è così:
    codice:
    Dim objBMP As System.Drawing.Bitmap
            Dim objGraphics As System.Drawing.Image
    
            'Quindi prendiamo delle informazioni importanti:
    
            objBMP = New Bitmap(FileUpload1.FileContent)
            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 600 px di valore.
    
            ' Creo la miniatura in scala
            Dim maxImage As Integer = 600
            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)
    
    
            'Crea 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)
    
            'recuperiamo il nome senza estensione
            Dim strFileNamePath As Object = System.IO.Path.GetFileNameWithoutExtension(FileUpload1.FileName)
    
            'recuperiamo solo l'estensione del file con il punto
            Dim strFileExtension As Object = System.IO.Path.GetExtension(FileUpload1.FileName)
    
            'Copia il file originale rinominandolo nella cartella public/FotoVedi
            Dim filePath3IMG As String = myUValue & strFileExtension
            filePath3 = filePath3 & filePath3IMG
            'Infine diamogli un nome e salviamola:
            objGraphics.Save(filePath3)
    Il problema potrebbe essere:
    codice:
    ...
    objBMP = New Bitmap(FileUpload1.FileContent)
    ...
    objGraphics.Save(filePath3)
    oppure non c'entra nulla...

  8. #8
    Utente di HTML.it L'avatar di osgb
    Registrato dal
    May 2004
    residenza
    Monza
    Messaggi
    179
    Risolto con altro codice.
    Però adesso devo rinominare il file appena salvato nella cartella ../public/FotoUpload

    So che si usa File.Move, però funziona se io le scrivo direttamente il nome del file.
    Nel caso in cui ci fossero due variabili: una è appunto Upload.Filename e l'altra è NuovoNome. La path è ../public/FotoUpload scrivo così:

    codice:
    File.Move(path & Upload, path & NuovoNome)
    Non mi accetta il carattere &

    Come faccio?
    Grazie.

  9. #9

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.