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

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
http://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.


Approfondimenti

Commenti

Esprimi il tuo giudizio su questo script:

Per procedere devi essere autenticato.

danielix05 scrive:
#446 - Upload con ASP.NET di immagini con controllo su content type, dimensione e larghezza/altezza

ciaoma sarà possibile effettuare anche il resize con questo stesso script?spero in voi e in qualche indicazione. sto ammattendo.
mercoledì 12 dicembre 2007 | 6 risposte
augure scrive:
#446 - Upload con ASP.NET di immagini con controllo su content type, dimensione e larghezza/altezza

Buongiorno, sono Roberto da Bologna, fresco fresco di iscrizione.  Ho trovato assai utile questo script e l'ho subito messo in pratica.Però ho due...
giovedì 25 maggio 2006 | 4 risposte
zioturo scrive:
venerdì 4 novembre 2005 | 3 risposte

Per inserire un commento, devi registrarti alla nostra community.




IN EVIDENZA
MISC