Procedura: caricare file con il controllo server Web FileUpload
Aggiornamento: novembre 2007
Utilizzando il controllo server Web FileUpload, è possibile consentire agli utenti di inviare un file dal computer in uso al server. Il file che deve essere caricato viene inviato al server come parte della richiesta del browser durante il postback. Una volta completato il caricamento, è possibile gestire il file nel codice.
Nota: |
---|
Le dimensioni possibili del file dipendono dal valore dell'impostazione di configurazione MaxRequestLength. Se un utente tenta di caricare un file di dimensioni superiori al limite massimo, l'operazione avrà esito negativo. |
Per caricare un file con il controllo server Web FileUpload
Aggiungere un controllo FileUpload alla pagina.
Nota: Per motivi di protezione, non è possibile precaricare il nome di un file nel controllo FileUpload.
In un gestore eventi, ad esempio quello per l'evento Load della pagina, effettuare le seguenti operazioni:
Accertarsi che nel controllo FileUpload sia presente un file caricato verificando la proprietà HasFile del controllo.
Verificare il nome o il tipo MIME del file per accertarsi che il file caricato dagli utenti possa essere accettato. Per verificare il tipo MIME, ottenere l'oggetto HttpPostedFile esposto come proprietà PostedFile del controllo FileUpload. È possibile ottenere il tipo MIME verificando la proprietà ContentType del file pubblicato.
Nota sulla sicurezza: In alcune casi i tipi MIME relativi ai file caricati possono venire compromessi. La sola verifica del tipo MIME del file non è quindi una garanzia di protezione sufficiente.
Salvare il file in una posizione specificata. È possibile chiamare il metodo SaveAs dell'oggetto HttpPostedFile. In alternativa, il file caricato può essere gestito come flusso o matrice di byte tramite la proprietà InputStream dell'oggetto HttpPostedFile.
Nell'esempio seguente viene illustrato l'utilizzo di un file caricato. Il codice esegue la verifica dell'estensione del file caricato in base a un elenco codificato di estensioni accettate e rifiuta i file con estensione diversa. Il file viene quindi memorizzato in una cartella UploadedImages nel sito Web corrente. Il file caricato viene salvato con lo stesso nome a cui era associato nel computer client. Viene utilizzata la proprietà FileName dell'oggetto FileUpload perché la proprietà FileName dell'oggetto HttpPostedFile restituisce il percorso completo del file nel computer client.
Nota sulla sicurezza: Nascondere agli utenti il percorso e il nome del file salvato per evitare di rivelare informazioni che potrebbero essere utilizzate in modo non lecito.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If IsPostBack Then Dim path As String = Server.MapPath("~/UploadedImages/") Dim fileOK As Boolean = False If FileUpload1.HasFile Then Dim fileExtension As String fileExtension = System.IO.Path. _ GetExtension(FileUpload1.FileName).ToLower() Dim allowedExtensions As String() = _ {".jpg", ".jpeg", ".png", ".gif"} For i As Integer = 0 To allowedExtensions.Length - 1 If fileExtension = allowedExtensions(i) Then fileOK = True End If Next If fileOK Then Try FileUpload1.PostedFile.SaveAs(path & _ FileUpload1.FileName) Label1.Text = "File uploaded!" Catch ex As Exception Label1.Text = "File could not be uploaded." End Try Else Label1.Text = "Cannot accept files of this type." End If End If End If End Sub
protected void Page_Load(object sender, EventArgs e) { if(IsPostBack) { Boolean fileOK = false; String path = Server.MapPath("~/UploadedImages/"); if (FileUpload1.HasFile) { String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower(); String[] allowedExtensions = {".gif", ".png", ".jpeg", ".jpg"}; for (int i = 0; i < allowedExtensions.Length; i++) { if (fileExtension == allowedExtensions[i]) { fileOK = true; } } } if (fileOK) { try { FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName); Label1.Text = "File uploaded!"; } catch (Exception ex) { Label1.Text = "File could not be uploaded."; } } else { Label1.Text = "Cannot accept files of this type."; } } }