Condividi tramite


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

  1. Aggiungere un controllo FileUpload alla pagina.

    Nota:

    Per motivi di protezione, non è possibile precaricare il nome di un file nel controllo FileUpload.

  2. In un gestore eventi, ad esempio quello per l'evento Load della pagina, effettuare le seguenti operazioni:

    1. Accertarsi che nel controllo FileUpload sia presente un file caricato verificando la proprietà HasFile del controllo.

    2. 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.

    3. 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.";
            }
        }
    }
    

Vedere anche

Concetti

Cenni preliminari sul controllo server Web FileUpload