LA.Net
Reflexões sobre C#, .Net e programação em geral

Existem várias formas de efectuarmos upload de ficheiros. Actualmente a utilização desta funcionalidade em Asp.Net é obtida à custa do controlo HtmlInputFile. A única dificuldade associada à utilização deste controlo reside no facto de ser necessário modificar o tipo conteúdo associado ao formulário (algo que toda a gente se esquece quando utiliza o controlo pela primeira vez). Para além disso, é ainda necessário ter em atenção que o tamanho máximo do ficheiro é definido através do atributo maxRequestLength do elemento httpRuntime.

A nova versão da plataforma apresenta um novo controlo designado de FileUpload que deve ser utilizado para efectuar o upload tradicional de ficheiros. Este controlo apresenta algumas vantagens em relação ao controlo HtmlInputFile utilizado na versão 1.XX:

  • não é  necessário definir o tipo de conteúdo do formulário (o controlo encarrega-se de definir o valor correcto);
  • o controlo possui uma propriedade (PostedFile) que nos permite obter uma referência ao ficheiro que foi transferido (para além da referência aos bytes que constituem o ficheiro, conseguimos ainda obter outros dados que podem ser importantes - ver classe HttpPostedFile).

O excerto seguinte demonstra a utilização do novo controlo:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script runat="server">
    void ProcessClick( object sender, EventArgs args )
    {
        if ( file.HasFile )
        {
            try
            {
                file.SaveAs( String.Format( "{0}\\{1}", Server.MapPath( "~/uploads" ), file.FileName ) );
                StringBuilder str = new StringBuilder( );
                str.AppendFormat( "Detalhes do ficheiro <br />Nome: {0}<br />Tamanho: {1}<br />Tipo: {2}", file.FileName,
                                    file.PostedFile.ContentLength.ToString( ), file.PostedFile.ContentType );

                info.Text = str.ToString( );
            }
            catch ( Exception ex )
            {
                info.Text = ex.ToString( );
            }
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <h3>Upload de ficheiros em asp.net 2 (FileUpload)</h3>
        Escolha um ficheiro:<asp:FileUpload runat="server" ID="file" />
        <asp:Button runat="server" id="bt" Text="Upload" BorderColor="black" BorderStyle="Solid" BorderWidth="1" OnClick="ProcessClick" /><br />
        <asp:Label runat="server" ID="info" ></asp:Label>
    </form>
</body>
</html>

posted on Sunday, March 20, 2005 5:41 PM
Comments
  • # re: Upload de ficheiros na versão 2.0 do Asp.Net
    vitorsilva
    Posted @ 3/21/2005 12:53 AM
    desculpa a minha ignorância mas nunca tinha visto "Server.MapPath( "~/uploads" )"
    o que quer dizer o ~ ?
  • # Almas g
    Programando .NET
    Posted @ 4/22/2005 1:18 PM
  • # re: Upload de ficheiros na versão 2.0 do Asp.Net
    gagarine
    Posted @ 5/29/2006 4:29 PM
    12E1CY
  • # re: Upload de ficheiros na versão 2.0 do Asp.Net
    Paulo César Viana
    Posted @ 10/22/2007 11:45 PM
    Muito simples! Abraço
Title  
Name  
Url
Box Code
Protected by FormShield
Comments