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

Traduções de Artigos Traduções de Artigos
Artigo: 323245 - 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 Basic. NET. Neste artigo, criou um ASP.NET ficheiro (WebForm1.aspx) e o respectivo ficheiro de código subjacente relacionadas (WebForm1.aspx.vb) para carregar ficheiros para um directório denominado dados.


Criar a 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 Projectos do Visual Basic 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/VBNetUpload, que cria o nome de projecto predefinido de VBNetUpload. Repare que carrega o ficheiro WebForm1.aspx na vista estruturador do Visual Studio. NET.

Criar o directório de dados

Depois de criar a aplicação, pode 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 ASPNET do trabalho.
  1. Na janela do Explorador de solução do Visual Studio. NET, clique com o botão direito do rato VBNetUpload, 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 encontra-se na seguinte pasta:
    C:\Inetpub\wwwroot\VBNetUpload\Data
  4. Para alterar a segurança 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 ou a conta de serviço de rede se estão a utilizar Microsoft Internet Information Services (IIS) 6.0 e, em seguida, clique para seleccionar as caixas de verificação Permitir as seguintes permissões:
    • Ler e executar
    • Lista o conteúdo das pastas
    • Ler
    • Escrever

    Clique para desmarcar quaisquer outras Permitir e Negar caixas de verificação.
  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. Regressar à instância aberta da Visual Studio. NET. WebForm1.aspx deve ser aberto na janela Designer.
  2. Para visualizar o código HTML da página WebForm1.aspx, clique com o botão direito do rato WebForm1.aspx na janela Designer e, em seguida, clique em Ver código-fonte HTML.
  3. Localize o seguinte código HTML, que contém a tag <form>:
    <form id="Form1" method="post" runat="server">
    					
  4. Adicionar o enctype = "multipart / - dados do formulário" atributo de nome-valor para a tag <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>tag 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>
    					

Adicionar o código de envio para o ficheiro de código subjacente WebForm1.aspx.vb

Para modificar o ficheiro de código subjacente WebForm1.aspx.vb para que aceita os dados enviados, siga estes passos:
  1. No menu Ver, clique em <a1>estrutura</a1>.
  2. Faça duplo clique em Enviar. O Visual Studio abre o ficheiro de código subjacente WebForm1.aspx.vb e gera automaticamente o código da forma seguinte:
    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
    
    End Sub
    					
  3. Verifique se existe o seguinte código ao nível do ficheiro WebForm1.vb classe:
    Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
    						
    se este código não existir no ficheiro, adicione o código para o ficheiro após a seguinte linha:
    Inherits System.Web.UI.Page
    					
  4. Localize o seguinte código:
    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
    					
  5. Prima ENTER para adicionar uma linha em branco e, em seguida, adicione o seguinte código:
    If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
    
    Dim fn As String =                      System.IO.Path.GetFileName(File1.PostedFile.FileName)
    Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
    Try
       		File1.PostedFile.SaveAs(SaveLocation)
       		Response.Write("The file has been uploaded.")
    Catch Exc As Exception
     	Response.Write("Error: " & Exc.Message)
    End Try
    Else
    Response.Write("Please select a file to upload.")
    End If
    						
    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 é transferido um ficheiro válido, o nome do ficheiro é extraído utilizando o espaço de nomes System.IO e respectivo destino é montado num caminho de ' Guardar como '. Depois do destino final for conhecido, o ficheiro é guardado utilizando o método File1.PostedFile.SaveAs. Qualquer excepção se encontre oculto, e a mensagem de excepção é apresentada no ecrã.
  6. Verifique se a subrotina Submit1 aparece da seguinte forma:
    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick
    	If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
                Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
                Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
                Try
                    File1.PostedFile.SaveAs(SaveLocation)
                    Response.Write("The file has been uploaded.")
                Catch Exc As Exception
                    Response.Write("Error: " & Exc.Message)
                End Try
            Else
                Response.Write("Please select a file to upload.")
            End If
    End Sub
    					

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 Compilar, clique em <a1>Build Solution</a1>.
  2. No Solution Explorer, clique com o botão direito do rato WebForm1.aspx e, em seguida, clique em Ver no browser.
  3. Depois de WebForm1.aspx aberto no browser, clique em Procurar.
  4. Na caixa de diálogo Escolher ficheiro, seleccione um ficheiro com menos de 4 megabytes (MB) e, em seguida, clique em Abrir.
  5. Carregar o ficheiro, clique em Enviar. Repare que envia o ficheiro para o servidor Web e que recebe a mensagem "O ficheiro foi enviado".
  6. Regressar à instância aberta da Explorador do Windows e, em seguida, localize o directório de dados.
  7. Certifique-se de que o ficheiro foi enviado para os dados do directório.

Enviar ficheiros maiores

Por predefinição, o ASP.NET permite que apenas os ficheiros que são 4.096 quilobytes (KB) (ou 4 megabytes [MB]) ou inferior a ser transferidas para o servidor Web. Para carregar ficheiros maiores, é necessário alterar o parâmetro maxRequestLength o <httpruntime> secção no ficheiro Web.config.

Nota Quando o atributo maxRequestLength é definido no ficheiro Machine.config e, em seguida, um pedido é registado (por exemplo, um envio de ficheiros) que excede o valor de maxRequestLength, não pode ser apresentada uma página de erro personalizada. Em vez disso, o Microsoft Internet Explorer irá 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 o ficheiro Machine.config.

Por predefinição, o <httpruntime> elemento está definido para os seguintes parâmetros em Machine.config o 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 pasta.


Listagem de código completo

WebForm1.aspx

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="VBNetUpload.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
  <HEAD>
    <title>WebForm1</title>
    <meta name="GENERATOR" content="Microsoft Visual Studio.NET 7.0">
    <meta name="CODE_LANGUAGE" content="Visual Basic 7.0">
    <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" enctype="multipart/form-data" method="post" 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.vb

Public Class WebForm1
    Inherits System.Web.UI.Page
    Protected WithEvents File1 As System.Web.UI.HtmlControls.HtmlInputFile
    Protected WithEvents Submit1 As System.Web.UI.HtmlControls.HtmlInputButton

#Region " Web Form Designer Generated Code "

    'This call is required by the Web Form Designer.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

    End Sub

    Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
        'CODEGEN: This method call is required by the Web Form Designer
        'Do not modify it using the code editor.
        InitializeComponent()
    End Sub

#End Region

    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Put user code to initialize the page here
    End Sub

    Private Sub Submit1_ServerClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit1.ServerClick

        If Not File1.PostedFile Is Nothing And File1.PostedFile.ContentLength > 0 Then
            Dim fn As String = System.IO.Path.GetFileName(File1.PostedFile.FileName)
            Dim SaveLocation as String = Server.MapPath("Data") & "\" & fn
            Try
                File1.PostedFile.SaveAs(SaveLocation)
                Response.Write("The file has been uploaded.")
            Catch Exc As Exception
                Response.Write("Error: " & Exc.Message)
            End Try
        Else
            Response.Write("Please select a file to upload.")
        End If

    End Sub
End Class
				

Mais Informação

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

Durante o processo de envio, o ASP.NET carrega todo o ficheiro na memória antes do utilizador pode guardar o ficheiro no disco. Por conseguinte, o processo pode reciclar devido do 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 ocupar antes do processo ser reciclado automaticamente. Reciclagem impede fugas de memória de causar ASP.NET falhar ou parar de responder.

Além disso, outros factores desempenham um papel no tamanho máximo do ficheiro que pode ser carregado. Estes factores incluem a memória disponível, espaço em disco disponível, velocidade do processador e tráfego de rede actual. Com tráfego regular dos ficheiros que está a ser enviados, a Microsoft recomenda que utilize um tamanho máximo do ficheiro no intervalo de 10 a 20 megabytes (MB). Se raramente carregar ficheiros, o tamanho máximo do ficheiro poderá 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 máximo do ficheiro que são mencionados neste artigo. Para determinar mais precisos tamanhos de ficheiro, execute tensão testar nos computadores que sejam semelhantes aqueles que serão utilizadas na produção.

Poderá detectar as seguintes mensagens de erro se encontrar 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 RAM disponível).

  • Excepção do tipo System.OutOfMemoryException foi accionada.
Também poderão descobrir que envios ocorrem muito lentamente. Se observar o processo Aspnet_wp.exe no Gestor de tarefas do Windows, irá reparar que a memória delta altera ao 64 KB em 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 de.

Referências

Para obter informações adicionais, visite os seguintes Web sites da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/en-us/library/e1f13641(vs.71).aspx
http://msdn.microsoft.com/en-us/library/ms535260(VS.85).aspx
http://msdn2.microsoft.com/en-us/library/ms533745.aspx
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile(vs.71).aspx
http://msdn2.microsoft.com/en-us/library/system.web.ui.htmlcontrols.htmlinputfile.postedfile(vs.71).aspx

Propriedades

Artigo: 323245 - Última revisão: 21 de maio de 2007 - Revisão: 5.7
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
Palavras-chave: 
kbmt kbprogramming kbhowtomaster kbservercontrols KB323245 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: 323245

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