Como enviar um ficheiro num servidor da Web em ASP.NET utilizando o Visual C#. NET

Traduções de Artigos Traduções de Artigos
Artigo: 323246 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo descreve como enviar um ficheiro num servidor Web utilizando o Visual C#. NET. Neste artigo, cria um ficheiro do Microsoft ASP.NET (WebForm1.aspx) e o ficheiro de código subjacente relacionados (WebForm1.aspx.cs) para enviar ficheiros para um directório denominado dados.


Criar uma aplicação do ASP.NET

No Microsoft Visual Studio. NET, siga estes passos para criar uma nova aplicação carregue arquivos para o servidor Web:
  1. Inicie o Microsoft Visual Studio NET..
  2. No menu ficheiro , aponte para Novo e, em seguida, clique em projecto .
  3. Na caixa de diálogo Novo projecto , clique em Visual C# Projects em Project Types e, em seguida, clique em ASP.NET Web Application em modelos .
  4. Na caixa localização , escreva o URL para criar o projecto. Neste exemplo, escreva http://localhost/CSharpUpload , que cria o nome de projecto predefinido de CSharpUpload. Repare que o ficheiro WebForm1.aspx carrega na vista estruturador do Visual Studio. NET.

Criar o directório de dados

Depois de criar a aplicação, criar o directório de dados que irão aceitar ficheiros enviados. Depois de criar este directório, também tem de definir permissões de escrita para a conta do ASPNET de trabalho.
  1. Na janela Solution Explorer do Visual Studio. NET, clique com o botão direito do rato CSharpUpload , aponte para Adicionar e, em seguida, clique em Nova pasta . Por predefinição, é criada uma nova pasta denominada NewFolder1.
  2. Para alterar o nome da pasta para dados, clique com o botão direito do rato NewFolder1 , clique em Mudar o nome e, em seguida, escreva dados .
  3. Inicie o Explorador do Windows e, em seguida, localize a pasta de sistema de ficheiros de dados que criou no passo 2. Por predefinição, esta pasta está localizada na seguinte pasta:
    C:\Inetpub\wwwroot\CSharpUpload\Data
  4. Para alterar a segurança de definições para conceder escrever permissões para o directório de dados, clique com o botão direito do rato em dados e, em seguida, clique em Propriedades .
  5. Na caixa de diálogo Propriedades de dados , clique no separador segurança e, em seguida, clique em Adicionar .
  6. Na caixa de diálogo Seleccionar utilizadores ou grupos , clique na conta ASPNET e, em seguida, clique em Adicionar . Clique em OK para fechar a caixa de diálogo Seleccionar utilizadores ou grupos .
  7. Faça clique sobre o aspnet_wp conta (computername \ASPNET) conta e, em seguida, clique para seleccionar as caixas de verificação Permitir para as seguintes permissões:

    • Ler e executar
    • Listar conteúdo das pastas
    • Ler
    • escrever

    Clique para desmarcar quaisquer outras caixas de verificação Permitir e Negar .
  8. Clique em OK para fechar a caixa de diálogo Propriedades de dados . Modificou as permissões de directório de dados para aceitar ficheiros de utilizador carregado com êxito.

Modificar a página WebForm1.aspx

Para modificar o código HTML do ficheiro WebForm1.aspx para permitir que os utilizadores transfiram ficheiros, siga estes passos:
  1. Voltar a instância aberta da Visual Studio. NET. WebForm1.aspx deve estar aberto na janela Designer.
  2. Para visualizar o código HTML da página WebForm1.aspx, clique com o botão direito do rato em WebForm1.aspx na janela Designer e, em seguida, clique em Vista de código HTML .
  3. Localize o seguinte código HTML, que contém o código <form>:
    <form id="Form1" method="post" runat="server">
    					
  4. Adicionar o enctype = "multipart / - dados de formulário" atributo nome-valor para o código <form> da seguinte forma:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    					
  5. Após a abertura <form> etiqueta, adicione o seguinte código:
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    					
  6. Certifique-se de que o HTML <form> código aparece da seguinte forma:
    <form id="Form1" method="post" enctype="multipart/form-data" runat="server">
    <INPUT type=file id=File1 name=File1 runat="server" />
    <br>
    <input type="submit" id="Submit1" value="Upload" runat="server" />
    </form>
    					

Adicione o código de envio ao ficheiro de código WebForm1.aspx.cs

Para modificar o ficheiro de código WebForm1.aspx.cs poder aceitar os dados enviados, siga estes passos:
  1. No menu Ver , clique em ' estrutura '.
  2. Faça duplo clique em Enviar . Visual Studio abre o ficheiro de código WebForm1.aspx.cs e gera automaticamente o seguinte código de método:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    
    
    }
  3. Verifique se existe o seguinte código ao nível da classe da ficheiro WebForm1.cs:
    protected System.Web.UI.HtmlControls.HtmlInputFile File1;
    protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
    						
    se este código não existir no ficheiro, adicione o código para o ficheiro após a seguinte linha:
    public class WebForm1 : System.Web.UI.Page
    {
    					
  4. Localize o seguinte código:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    					
  5. Prima ENTER para adicionar uma linha em branco e, em seguida, adicione o seguinte código:
    if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    {
    	string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    	string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    	try
    	{
    		File1.PostedFile.SaveAs(SaveLocation);
    		Response.Write("The file has been uploaded.");
    	}
    	catch ( Exception ex )
    	{
    		Response.Write("Error: " + ex.Message);
    		//Note: Exception.Message returns a detailed message that describes the current exception. 
    		//For security reasons, we do not recommend that you return Exception.Message to end users in 
    		//production environments. It would be better to put a generic error message. 
    	}
    }
    else
    {
    	Response.Write("Please select a file to upload.");
    }
    este código verifica pela primeira vez que foi enviado um ficheiro. Não se foi seleccionado nenhum ficheiro, receberá a mensagem "Seleccione um ficheiro para carregar". Se enviar um ficheiro válido, o nome do ficheiro é extraído utilizando o espaço de nomes System.IO e respectivo destino é montado no caminho de ' Guardar como ' . Depois do destino final for conhecido, o ficheiro é guardado utilizando o método File1.PostedFile.SaveAs . Qualquer excepção é aplicados véus e a mensagem de excepção é apresentada no ecrã.
  6. Verifique se a subrotina Submit1 aparece da seguinte forma:
    private void Submit1_ServerClick(object sender, System.EventArgs e)
    {
    	if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
    	{
    		string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    		string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
    		try
    		{
    			File1.PostedFile.SaveAs(SaveLocation);
    			Response.Write("The file has been uploaded.");
    		}
    		catch ( Exception ex )
    		{
    			Response.Write("Error: " + ex.Message);
    			//Note: Exception.Message returns detailed message that describes the current exception. 
    			//For security reasons, we do not recommend you return Exception.Message to end users in 
    			//production environments. It would be better just to put a generic error message. 
    		}
    	}
    	else
    	{
    		Response.Write("Please select a file to upload.");
    	}
    }

Testar a aplicação

Para criar a solução do Visual Studio .NET e para testar a aplicação, siga estes passos:
  1. No menu criar , clique em Criar soluções .
  2. No Solution Explorer, clique com o botão direito do rato em WebForm1.aspx e, em seguida, clique em View in browser .
  3. Depois de WebForm1.aspx aberto no browser, clique em Procurar .
  4. Na caixa de diálogo Seleccionar ficheiro , seleccione um ficheiro que é menor do que 4 megabytes (MB) e, em seguida, clique em Abrir .
  5. Para enviar o ficheiro, clique em Enviar . Repare que envia o ficheiro para o servidor Web e que recebe a mensagem "O ficheiro foi enviado".
  6. Regresse à instância aberta do Explorador do Windows e, em seguida, localize o directório de dados.
  7. Certifique-se que o ficheiro foi enviado para os dados do directório.

Enviar ficheiros maiores

Por predefinição, o ASP.NET permite apenas ficheiros que estão 4.096 kilobytes (KB) (ou 4 MB) ou menos para ser enviado para o servidor Web. Para enviar ficheiros maiores, tem de alterar o parâmetro maxRequestLength o <httpruntime> secção no ficheiro Web.config.

Nota Quando o atributo maxRequestLength está definido no ficheiro Machine.config e, em seguida, um pedido é registado (por exemplo, um envio de ficheiros) que excede o valor de maxRequestLength , uma página de erro personalizadas não pode ser apresentada. Em vez disso, o Microsoft Internet Explorer apresentará uma mensagem de erro "Não é possível localizar o servidor ou de DNS".

Se pretender alterar esta definição para todo o computador e não apenas esta aplicação do ASP.NET, tem de modificar a Machine.config ficheiro.

Por predefinição, o <httpruntime> elemento está definido para os seguintes parâmetros de Machine.config ficheiro:
<httpRuntime 
executionTimeout="90" 
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false" 
minFreeThreads="8" 
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100"
/>
				
Machine.config o ficheiro está localizado no \ System Root \Microsoft.NET\Framework\ Version Number \Config directório.


Listagem de código completo

WebForm1.aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name=vs_defaultClientScript content="JavaScript">
    <meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
  </HEAD>
  <body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" enctype="multipart/form-data" runat="server">
<INPUT type=file id=File1 name=File1 runat="server" >
<br>
<input type="submit" id="Submit1" value="Upload" runat="server" NAME="Submit1">
</form>

	
  </body>
</HTML>
				

WebForm1.aspx.cs

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace CSharpUpload
{
	/// <summary>
	/// Summary description for WebForm1.
	/// </summary>
	public class WebForm1 : System.Web.UI.Page
	{
		protected System.Web.UI.HtmlControls.HtmlInputFile File1;
		protected System.Web.UI.HtmlControls.HtmlInputButton Submit1;
	
		private void Page_Load(object sender, System.EventArgs e)
		{
			// Put user code to initialize the page here
		}

		#region Web Form Designer generated code
		override protected void OnInit(EventArgs e)
		{
			// 
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			// 
			InitializeComponent();
			base.OnInit(e);
		}
		
		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{    
			this.Submit1.ServerClick += new System.EventHandler(this.Submit1_ServerClick);
			this.Load += new System.EventHandler(this.Page_Load);

		}
		#endregion

		private void Submit1_ServerClick(object sender, System.EventArgs e)
		{
			if( ( File1.PostedFile != null ) && ( File1.PostedFile.ContentLength > 0 ) )
			{
				string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
				string SaveLocation = Server.MapPath("Data") + "\\" +  fn;
				try
				{
					File1.PostedFile.SaveAs(SaveLocation);
					Response.Write("The file has been uploaded.");
				}
				catch ( Exception ex )
				{
					Response.Write("Error: " + ex.Message);
					//Note: Exception.Message returns a detailed message that describes the current exception. 
					//For security reasons, we do not recommend that you return Exception.Message to end users in 
					//production environments. It would be better to return a generic error message. 
				}
			}
			else
			{
				Response.Write("Please select a file to upload.");
			}
		}
	}
}
	

Mais Informação

Teoricamente, o tamanho de transferência máximo do ficheiro é bastante grande. No entanto, devido a monitorização da integridade ASP.NET, não é possível carregar ficheiros muito grandes no ASP.NET. O processo de trabalho do ASP.NET tem um espaço de endereço virtual de 2 gigabytes (GB). No entanto, o processo de trabalho do ASP.NET utiliza apenas um pouco mais do que 1 GB devido a fragmentação de monitorização e memória saúde.

Durante o processo de envio, o ASP.NET carrega todo o ficheiro na memória antes do utilizador pode guardar o ficheiro no disco. Assim, o processo pode reciclar devido o atributo memoryLimit do código processModel no ficheiro Machine.config. O atributo memoryLimit Especifica a percentagem de memória física que o processo de trabalho do ASP.NET pode exaustão antes do processo é reciclado automaticamente. Reciclagem impede que fugas de memória fazendo com que o ASP.NET para falhar ou para deixar de responder.

Além disso, outros factores desempenham um papel no tamanho máximo do ficheiro que pode ser carregado. Estes factores incluem memória disponível, espaço em disco disponível, velocidade do processador e tráfego de rede actual. Com o tráfego normal dos ficheiros que está a ser enviados, a Microsoft recomenda que utilize um tamanho máximo de ficheiro no intervalo de 10 a 20 megabytes (MB). Se raramente enviar ficheiros, o tamanho máximo do ficheiro pode ser 100 MB.

Nota Pode transferir ficheiros maiores do que 100 MB no ASP.NET. No entanto, a Microsoft recomenda que siga os tamanhos de envio de máximo do ficheiro mencionadas neste artigo. Para determinar mais precisos tamanhos de ficheiro, execute stress testar nos computadores que são semelhantes aos que serão utilizados na produção.

Poderá detectar as seguintes mensagens de erro se tiver limites de tamanho do ficheiro durante o processo de envio de ficheiros:
  • Não é possível apresentar a página.
  • Aplicação de servidor está indisponível
    No registo de eventos, a mensagem de erro será semelhante à seguinte:

    aspnet_wp.exe (PID: PIDNumber) foi reciclado porque excedia de consumo de memória SizeLimit MB (Percentage por cento da memória RAM disponível).

  • Tipo de excepção System.OutOfMemoryException accionado.
Também poderá encontrar transferências ocorrem muito lentamente. Se observar o processo Aspnet_wp.exe no Gestor de tarefas do Windows, notará que delta memória altera ao 64 KB a intervalos de 1 a 2 segundos. Dependendo do tamanho do ficheiro, este atraso poderá fazer com que o processo de trabalho do ASP.NET reciclar devido a um erro responseDeadlock.

Referências

Para obter informações adicionais, visite os seguintes Microsoft Developer Network (MSDN) Web sites;
elemento <httpruntime>
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx

Elemento de dados | objecto de entrada
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx

Atributo ENCTYPE | enctype propriedade
http://msdn2.microsoft.com/en-us/library/ms533745.aspx

Classe HtmlInputFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile(vs.71).aspx

Propriedade HtmlInputFile.PostedFile
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile(vs.71).aspx

Propriedades

Artigo: 323246 - Última revisão: 21 de maio de 2007 - Revisão: 5.11
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
Palavras-chave: 
kbmt kbhowtomaster KB323246 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 323246

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com