Cómo: Cargar archivos con el control FileUpload de servidor Web

Actualización: noviembre 2007

Mediante el control FileUpload de servidor Web, puede proporcionar a los usuarios un modo de enviar un archivo desde su equipo al servidor. El archivo que se va a cargar se envía al servidor como parte de la solicitud del explorador durante la devolución de datos. Una vez que finaliza la carga del archivo, puede administrar el archivo en su código.

Nota:

El tamaño máximo del archivo que se puede cargar depende del valor de la opción de configuración MaxRequestLength. Si los usuarios intentan cargar un archivo que supera este valor máximo, se producirá un error en la carga.

Para cargar un archivo con el control FileUpload de servidor Web

  1. Agregue un control FileUpload a la página.

    Nota:

    Por razones de seguridad, no puede cargar previamente el nombre de un archivo en el control FileUpload.

  2. En un controlador de un evento, como el evento Load de la página, haga lo siguiente:

    1. Compruebe que el control FileUpload tiene un archivo cargado; para ello, consulte su propiedad HasFile.

    2. Compruebe el nombre o el tipo MIME del archivo para asegurarse de que los usuarios han cargado un archivo que desea aceptar. Para comprobar el tipo MIME, obtenga el objeto HttpPostedFile expuesto como la propiedad PostedFile del control FileUpload. Podrá obtener el tipo MIME a continuación al comprobar la propiedad ContentType del archivo enviado.

      Nota de seguridad:

      Los tipos MIME de los archivos cargados se pueden suplantar en algunos casos, por ello, revisar únicamente el tipo MIME del archivo no constituye una comprobación de seguridad confiable.

    3. Guarde el archivo en la ubicación que especifique. Puede llamar al método SaveAs del objeto HttpPostedFile. Si lo desea, puede administrar también el archivo cargado como una matriz o secuencia de bytes mediante la propiedad InputStream del objeto HttpPostedFile.

    En el ejemplo siguiente se ilustra cómo se trabaja con un archivo cargado. El código comprueba la extensión de nombre del archivo cargado en una lista codificada de forma rígida con las extensiones de nombre de archivo permitidas y rechaza todos los demás tipos de archivos. El archivo se escribe a continuación en una carpeta UploadedImages del sitio Web actual. El archivo cargado se guarda con el mismo nombre de archivo que tenía en el equipo cliente. Se utiliza la propiedad FileName del control FileUpload porque la propiedad FileName del objeto HttpPostedFile devuelve la ruta de acceso completa del archivo del equipo cliente.

    Nota de seguridad:

    No muestre la ruta de acceso ni el nombre del archivo guardado a los usuarios; si lo hace, puede desvelar información que podría resultar útil a usuarios malintencionados.

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

Vea también

Conceptos

Información general sobre FileUpload (Control de servidor Web)