Upload de arquivos com ASP.NET sem mistérios

Publicado em: 10/06/2007  |  .NET  |  Visualizações: 7.455  |  1 Comentário(s)
Neste primeiro artigo publicado no site DevMedia vou abordar a submissão de arquivos para o servidor utilizando a linguagem C# da plataforma .NET com o Visual Studio 2003, pois esta plataforma tem uma grande variedade de bibliotecas e no nosso exemplo não utilizaremos nenhum componente específico.

Vamos acrescentar algumas regras no upload do arquivo para não haver nenhum tipo de inconsistência. As regras são as seguintes:

- O tamanho limite do arquivo será de 200 Kb;

- Haverá um método para remover caracteres indesejados, espaços, etc;

- Faremos uma verificação para ver se já existe um arquivo com o mesmo nome do arquivo que estamos submetendo. Se existir não será feito o upload e vai aparecer uma mensagem para o usuário alterar o nome do arquivo;

- As extensões de arquivos serão limitadas, sendo as seguintes: jpg, gif, doc, pdf.


Obs.: Verificar as permissões no diretório onde serão gravados os arquivos que deve estar como escrita. Criar um diretório virtual para rodar a aplicação.


Próximo passo, a implementação:

Vamos utilizar um input file, um label e um button no nosso form, no evento onClick do button colocaremos o trecho de código abaixo com os comentários:
*********** início código evento onclick button
try
{

//inicializar as variáveis

string arq = fileImg.PostedFile.FileName;                

string extensao = "";

double tamanho = 0;

//tamanho maximo do upload em kb

double  permitido = 200;

//vamos utIlizar uma variavel para controlar a aceitação das regras

//se o valor padrão da variavel for alterado é porque alguma regra foi violada

string erroRegra="0";

// Teste para verificar se foi submetido o arquivo

if (fileImg.PostedFile !=null)
{

//identificamos o tamanho do arquivo

tamanho = Convert.ToDouble(fileImg.PostedFile.ContentLength)/1024;

      //verificamos a extensão através dos últimos 4 caracteres

      extensao = arq.Substring(arq.Length - 4).ToLower();

      //para saber o nome do arquivo utilizaremos a propriedade GetFileName

      //passando a string arq

      string nomeArq = System.IO.Path.GetFileName(tira_acentos(arq));

      //diretorio onde será gravado o arquivo

      //faremos uma chamada ao método tira_acentos para

      //remover espaços e caracteres indesejados.

      //criar o diretório arquivos no mesmo local da aplicação

      string diretorio = this.Server.MapPath("arquivos\"+tira_acentos(nomeArq));

      // o tamanho acima do permitido - violação de regra

      if (tamanho > permitido)
      {

            this.Label1.Text = "Tamanho Máximo permitido é de "+permitido+" kb!";

            erroRegra="1";

      }

      // extensão diferente de jpg, doc, pdf e gif - violação de regra

      if ( (extensao != ".jpg" && extensao != ".gif" && extensao!=".doc" && extensao!="pdf") )
      {

            this.Label1.Text ="Extensão inválida, só são permitidas .jpg, .doc, .pdf e .gif!";

            erroRegra="2";

      }

      if(erroRegra=="0")
      {

            try
               {

                  // verifica se já existe o nome do arquivo submetido

                  if(!File.Exists(diretorio))
                  {

                        fileImg.PostedFile.SaveAs(diretorio);

                        this.Label1.Text ="Arquivo enviado com sucesso!";

                  }
                  else
                        this.Label1.Text ="Já existe um arquivo com esse nome!";

                  }

                  //Caso ocorra alguma exceção será mostado no label

                  catch(UnauthorizedAccessException ex)
                  {

                        this.Label1.Text ="Erro no Upload:"+ex.Message;    

                  }

        }

}

}

catch
{

      this.Label1.Text ="Erro no Upload";

}



*********** fim código evento onclick button


O método abaixo remove acentos e caracteres indesejados e substitui por outros sem acento no nome do arquivo. Vejamos:

//Método que remove acentos, espaços e carateres indesejados

public static string tira_acentos(string texto)
{
string ComAcentos = "!@#$%¨&*()-?:{}][ÄÅÁÂÀÃäáâàãÉÊËÈéêëèÍÎÏÌíîïìÖÓÔÒÕöóôòõÜÚÛüúûùÇç ";

      string SemAcentos = "_________________AAAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUuuuuCc_";

      for(int i=0; i < ComAcentos.Length; i++)

    texto= texto.Replace(ComAcentos.ToString(),SemAcentos.ToString()).Trim();
  

return texto;
}



Espero que tenham aproveitado e até a próxima!
========================================
Conheça nosso parceiro e fonte desta matéria:


Autor da Matéria: Fabio Andre Barcelos
compartilhe
  Dica: Confira todo nosso conteúdo de .NET no site.
Links patrocinados
Últimos artigos do editor

design.jpg 13º EWD: Um evento para n.
No dia 11 de outubro de 2008.
gerencia.jpg A falta de estrutura dos .
Por que sites e sistemas são.
cel.jpg Tudo sobre o iPhone 3G no.
iPhone é um smartphone desen.
internet.jpg Como assinar um RSS
RSS é um formato de distribu.
design.jpg Quando reciclagem digital.
Vejam o que vocês podem faze.
tecnologia.jpg Energia elétrica via Wire.
Recentemente a Intel introdu.
Opinião do leitor:
1 Comentário(s)

  Lukas Hills comentou:

Olá Nícolas, Um bom dia! Visitei o seu site e gostei muito. Parabéns! Estou enviando esta mensagem para pedir um código usado num formulário para enviar anexos. Estou com um formulário pronto. Mas, não estou conseguindo fazer com que as informações digitadas e os anexos sejam enviadas para o meu e-mail logo que o usuário envia o formulário. O formulário que estou usando grava os anexos e o texto digitado pelo usuário num diretório determinado, mas não envia nada para o meu e-mail. Tenho que pegar as informações manualmente via FTP. Então, como eu faço para que estas informações sejam encaminhadas juntamente com os anexos para o meu e-mail logo que o usuário do meu site submetê-las? Os Componentes instalados no Servidor que uso são: CDONTS Object ADO DB Object File System Object ASPMail Object ASPUpload Object JMail Object Desde já agradeço a sua ajuda e aguardo o seu contato. Abraços, Lukas Hills

Publicado em: 19/06/2007 - 02:47

Acesso restrito
Destaques
Peixe Grande 2008 Peixe Grande 2008
O Oficina da Net está este ano participando do Projeto Peixe Grande 2008 na categoria de Blog. Ajude-nos vote!
13º Encontro de Webdesgin 13º Encontro de Webdesgin
Cobertura do evento - 13º Encontro de Webdesgin na cidade de Porto Alegre
Galaxy 7 - O Smartphone da Asus Galaxy 7 - O Smartphone da Asus
Imagens e especulações sobre o Smartphone da empresa foram publicadas na internet
Links patrocinados
Autor
Artigos Relacionados
Novos Artigos
Notícias Relacionados
Assine nosso RSS

© 2005 - 2008 - Oficina da Net - v 3.0 - É proibida a reprodução parcial ou completa do conteúdo deste site sem autorização por escrito. Resolução adequada: 1024x768px.