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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.