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.


