Upload de arquivos com ASP.NET sem mistérios

 

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[i].ToString(),SemAcentos[i].ToString()).Trim();

      

return texto; 

      

}

 

Espero que tenham aproveitado e até a próxima!