Upload con ASP.NET di immagini con controllo su content type, dimensione e larghezza/altezza

di Cristian Civera, in UserScript, ASP.NET, Upload,

Nello script #282 si è visto quando sia facile con ASP.NET effettuare l'upload di un file dal client sul server. Con un ulteriore esempio mostreremo come è possibile controllare che il file caricato soddisfi alcune condizioni, in particolare la dimensione e il tipo del file caricato.

<SCRIPT  language="VB" RUNAT="server"> 
' 20 KB=20*1024
const MaxLength=120480
const FileType="image/*"

'in pixel
const MaxWidth=350
const MaxHeight=250

 Sub BtnUp_Click(sender As Object, e As EventArgs)
   'controllo la dimensione del file
   If inputFile.PostedFile.ContentLength>MaxLength Then
     Results.InnerHtml = "Il file è di dimensioni troppo elevate. Max " & MaxLength/1024 & "KB"
   'controllo il tipo di file caricato in bytes
   ElseIf Not inputFile.PostedFile.ContentType.StartsWith("image") Then
     Results.InnerHtml = "Il file non è valido. Dev'essere un'immagine"
   Else
     'effettuo un controllo sulle dimensioni dell'immagine
     Dim img as System.Drawing.Image=System.Drawing.Image.FromStream(inputFile.PostedFile.InputStream)
     If img.Width>MaxWidth OrElse img.Height>MaxHeight Then
       Results.InnerHtml = "L'immagine ha dimensioni superiori a quelle consentite. Max " & MaxWidth & "x" & MaxHeight
     Else
       'se è tutto ok, salvo l'immagine
        inputFile.PostedFile.SaveAs( Server.MapPath(inputNome.Value) )
        Results.InnerHTML = "FileUploadato su " & inputNome.Value & "</b>!"
    End If
    img.Dispose()
   End If
 End Sub

Sub Page_Load(sender as Object, e as EventArgs)
   inputFile.Accept=FileType
End Sub
</SCRIPT>
 <form enctype="multipart/form-data" RUNAT="server">
 <DIV id=Results RUNAT="server"></DIV>
Uploada questo file:
 <input id="inputFile" type="file" RUNAT="server" /><BR>
Nome:
 <input id="inputNome" type="text" RUNAT="server" /><BR>
<input type="button" id="BtnUp" value="Upload!" OnServerClick="BtnUp_Click" RUNAT="server" />
 </form>
</body>

Nell'esempio, tramite la proprietà Accept di HttpInputFile impostiamo che tipo di file si vuole consentire al caricamento. E' una proprietà controllata dal browser, che può essere aggirata, perciò effettuiamo un ulteriore controllo lato server attraverso la proprietà ContentType verificando che sia di tipo ?image'.
Potete trovare una lista dei più diffusi mime type su
https://www.aspitalia.com/articoli/mime.aspx
Notare che * indica qualsiasi tipo di immagine (bmp,jpeg ecc..)
Interrogando la proprietà ContentLength controlleremo il numero di bytes del file caricato.
Inoltre, siccome autorizziamo soltanto l'upload di immagini, effettuiamo un ulteriore verifica sulle dimensione in pixel dell'immagine caricata, creando di conseguenza un oggetto Image del namespace System.Drawing tramite lo stream e controllandone quindi larghezza e altezza.

Può capitare inoltre di dover effettuare uploads di notevole dimensione. Il framework di default accetta l'invio di files non superiori ai 1024KB. Per modificare questa impostazione basta cambiare l'attributo maxRequestLength nel web.config:

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="1024"/>
  </system.web>
</configuration>

Nel caso si superi questo limite viene generato un HttpException che avvisa dell'errore.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi