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!