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