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:

  • Este campo só deve aceitar XX(kbytes).
  • Este campo só pode fazer upload de arquivos excel e pdf
  • Ao importar um arquivo de tamanho excedido de acordo com as regras de negócio da aplicação, enviar um e-mail dando ao usuário logado instruções de como compactar arquivos.

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:

  • Clique em File e depois em New Project
  • Na guia templates selecione Visual C# => Web => ASP.NET Empty Web Application
  • Escolha o nome que você deseja para o seu projeto, no artigo utilizaremos apenas o nome FileUploadControl(Lembrando que o namespace terá o mesmo nome do projeto).
  • Para Finalizar clique em ok.
  • Pronto o nosso projeto já está criado, agora vamos a parte mais legal, colocar a mão na massa.
Criando o projeto
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" style=" margin-left:23px;" 
    Text="Arquivo:"></asp:Label>
     <asp:FileUpload ID="FileUpload1" style=" margin-left:30px;" runat="server" /> 

    <br />
    <asp:Label ID="lblIdade" runat="server" Text="Idade:"></asp:Label>
    <asp:TextBox runat="server" Width="66" ReadOnly="true" 
    style=" margin-left:83px" ID="txtIdade"></asp:TextBox>

    <asp:Label ID="lblValor" runat="server" style=" margin-left:25px;" 
    Text="Valor Total:"></asp:Label>
    <asp:TextBox runat="server" style=" margin-left:10px;" 
    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.
Arquivo teste.txt
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.

Tela Inicial aplicação
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.

Arquivo Importado com sucesso.
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.