Upload de arquivos com C#

Veja neste artigo como fazer upload de arquivos utilizando a IDE Visual Studio 2012 com a linguagem de programação C#.

O upload de arquivos é uma tarefa comum no ambiente de desenvolvimento de software, no entanto é necessário realizar um estudo para verificar que tipos de tratamentos a sua funcionalidade apresentará.

Neste artigo em especial aprenderemos como importar um arquivo txt,ou seja, se o usuário escolher algum arquivo que não seja txt será exibindo uma mensagem amigável e consequentemente a importação será cancelada, até que um arquivo válido tenha sido informado.Algumas perguntas podem surgir como: Porque não deixar apenas o FileUpload, salvar os arquivos, sem verificar tipo ou tamanho do mesmo? Afinal o servidor que utilizo tem muito espaço de armazenamento. Para essa pergunta, nós podemos aprender que não importa se o servidor a ser utilizado possui muito espaço de armazenamento, isso é boa notícia, no entanto o cliente expressará suas vontades dizendo quais são as limitações para determinado campo.Por exemplo:

Utilizaremos o WebServerControl FileUpload, por ser um controle nativo do asp.net, é claro que essa mesma operação é possível utilizando a linguagem de marcação (HTML) um campo INPUT com o seu atributo “type” e valor “File”.

Além de realizar um upload de arquivos, aplicação irá ler os dados do arquivo recentemente importado e extrairá algumas informações para a pagina principal da aplicação.

O Aplicação será bem simples, se consistirá de um projeto ASP.NET Empty Web Application, com apenas uma página .aspx e fará o uso do namespace System.IO, para leitura do arquivo texto.

Nota. Este exemplo valida se o arquivo é do tipo .txt, no entanto se desejar pode fazer com outras extensões também, é o mesmo processo.

Criando o Projeto

Vamos criar um projecto ASP.NET Empty Web Application utilizando a linguagem C#.Para isso siga os seguintes passos:

Figura 1. Criando o projeto

Bom o foco do artigo é explicar de forma didática como realizar importação de um arquivo txt, então eu não me preocupei muito com o layout da aplicação, acredito que o mesmo esteja atendendo as explicações logo abaixo.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUpload.aspx.cs" Inherits="FileUploadControl.FileUpload" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div id="Titulo"> <h1>FILEUPLOAD ASP.NET e C#</h1> <hr /> </div> <div> <asp:Label id="lblData" Text="Data de Aniversário" runat="server" > </asp:Label> <asp:TextBox ID="txtData" ReadOnly="true" Width="66" runat="server"> </asp:TextBox> <asp:Label runat="server" ID="lblArquivo" Text="Arquivo:"></asp:Label> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /> <asp:Label ID="lblIdade" runat="server" Text="Idade:"></asp:Label> <asp:TextBox runat="server" Width="66" ReadOnly="true" ID="txtIdade"></asp:TextBox> <asp:Label ID="lblValor" runat="server" Text="Valor Total:"></asp:Label> <asp:TextBox runat="server" ReadOnly="true" ID="txtValor"></asp:TextBox> <br /> <asp:button id="button1" runat="server" text="Importar" OnClick="button1_Click" /> <br /> <br /> <asp:Label Text="" ID="Statuslbl" runat="server" /> </div> </form> </body> </html>
Listagem 1. FileUpload.aspx

Analisando o código acima, criamos um WebForm contendo três campos TextBox com a propriedade ReadOnly=True, uma label informando a situação da importação do arquivo e por final um controle de tipo FileUpload..

Nota: Neste artigo ao importar o arquivo, poderemos visualizar as informações nos campos, no entanto é uma boa prática deixar apenas para leitura, afinal estamos alterando uma informação proveniente de uma outra fonte de dados, isso não é regra, pode ser que o cliente queria sobrepor informações.
Figura 2. Arquivo teste.txt

Observe que o nosso arquivo txt possui apenas uma linha, os dados informados estão soltos sem nenhuma identificação, o parâmetro de busca será pelo caracter separador o ;. A partir deste delimitador conseguiremos extrair as informações necessárias

Nota: Este arquivo possui apenas uma linha de exemplo, o mesmo poderia ter varias linhas, possuindo o mesmo delimitador a informação seria extraída com sucesso da mesma forma.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; namespace FileUploadControl { public partial class FileUpload : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } private bool UploadArquivo() { FileUpload1.SaveAs((@"C:\Users\Tiago\Documents\" + FileUpload1.FileName)); return true; } private void Ler() { List<string> lista = new List<string>(); using (StreamReader sr = new StreamReader(@"C:\Users\Tiago\Documents\" + FileUpload1.FileName)) { string linha = sr.ReadToEnd(); string[] array = linha.Split(';'); txtData.Text = array[0]; txtIdade.Text = array[1]; txtValor.Text = array[2]; } } protected void button1_Click(object sender, EventArgs e) { if (FileUpload1.PostedFile.ContentType == "text/plain") { try { if (UploadArquivo()) { Ler(); } else { Statuslbl.Text = "Não foi possível realizar a importação do arquivo"; } } catch (Exception) { throw; } } else { Statuslbl.Text = "Favor coloque um arquivo .txt"; } } } }
Listagem 2. FileUpload.aspx.cs

O código acima possui dois Event Handlers importantes, tratando as operações básicas da aplicação como: Upload do arquivo e a leitura do mesmo e um evento de importar o arquivo. Caso o código esteja um pouco complicado, recomendo que estude o namespace System.IO a classe StreamReader, para poder se familiarizar com a sintaxe.

Nota: No momento de salvar o arquivo importado no servidor, verificar se o seu usuário possui permissões de escrever dados no disco, caso contrário será lançada uma exceção.

Execução do Projeto

Já que metemos a mão na massa programando, nada melhor do que testar a nossa aplicação, importando um arquivo válido e conferindo na página web os dados extraídos, fique a vontade de inserir um arquivo inválido e perceber como a verificação por tipo de arquivo acontece.

Figura 3. Tela Inicial aplicação

Esta é a página Default, da nossa aplicação, o próximo passo será escolher o arquivo desejado e em seguida importar-lo.

Figura 4. Arquivo Importado com sucesso

O arquivo foi importado com sucesso e os dados contido nele foram recuperados pela nossa aplicação, simples não?

Conclusão

Neste artigo tivemos a oportunidade de conhecer o WebServerControl FileUpload, afim de facilitar o nosso trabalho para upload de arquivos utilizando o .NET framework com a linguagem de programação C#.

Exploramos de forma bastante rápida a classe StreamReader pertencente ao namespace System.IO, afim de recuperarmos a informação do arquivo para a nossa aplicação web. Espero que tenham gostado e até a próxima.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados