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.
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.
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>
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..
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
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";
}
}
}
}
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.
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.
Esta é a página Default, da nossa aplicação, o próximo passo será escolher o arquivo desejado e em seguida importar-lo.
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.