Usuário com melhor resposta
Ajuda com o FileUpload!!

Pergunta
-
Entao pessoal e o seguinte estou tendo um probleminha aqui que nao estou conseguindo resolver, e com o FileUpload que
estou implementando para ele permitir certas extensoes ex: .gif , .jpg e o tamanho deles nao pode ser maiior que 200 k, so que alguma fotos .jpg e o tamanho e 202 por exemplo esta dando erro tanto na extensao quanto no tamanho, e nao era para acontecer isso!! vou mostrar o codigo aqui:
protected void Button6_Click(object sender, EventArgs e)
{
lbStatus.Text = "";
if (FileUpload1.HasFile)
{ //var caminho = @"C:\Users\PcGamerI5\Documents\Visual Studio 2013\Projects\DevTestesClasses\DevTestesClasses\upload\";
var caminho = Server.MapPath(@"upload\");
nomeArquivo = FileUpload1.FileName;
//var caminhoCompleto = caminho + nomeArquivo;
var caminhoCompleto = string.Format("{0} {1} ", caminho, nomeArquivo);
try
{
if (validaUpload())
{
FileUpload1.PostedFile.SaveAs(caminhoCompleto);
lbStatus.Text = nomeArquivo + " Arquivo enviado com Sucesso!";
}
else
lbStatus.Text = "Error: "+textoUpload;
}
catch (Exception ex)
{
lbStatus.Text = nomeArquivo + "Nenhum Arquivo encontrado.: " + ex;
}
}
else
{
lbStatus.Text = "Selecione um arquivo por favor!";
}Agora o metodo validaUpload() ....
public Boolean validaUpload()
{
Boolean retorno = true;
var tamanhoArquivo = FileUpload1.PostedFile.ContentLength; // tamanho em bytes
var extensao = System.IO.Path.GetExtension(nomeArquivo).ToLower();
//if (!(extensao.Equals(".gif")) || (extensao.Equals(".jpg")))
//{
// textoUpload += " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao;
// retorno = false;
//}
string[] extensoesPermitidas = { ".bmp", ".jpg", ".gif", ".pnj" };
for (int i = 0; i < extensoesPermitidas.Length; i++)
if (!string.Equals(extensao, extensoesPermitidas[i]))
{
textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao;
retorno = false;
}
else
{
retorno = true;
break;
}
if (tamanhoArquivo > 200000)
{
textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo;
retorno = false;
}
return retorno;
Respostas
-
Modifiquei um pouco o seu validaUpload. Você estava testando com um arquivo de que extensão e qual tamanho?
1Kb = 1024 byte, então 200Kb = 200*1204 = 204800
você estava utilizando uma extensão ".pnj", mas na verdade acho que deveria ser ".png".
public Boolean validaUpload() { Boolean retorno = true; var tamanhoArquivo = FileUpload1.PostedFile.ContentLength; // tamanho em bytes var extensao = System.IO.Path.GetExtension(nomeArquivo).ToLower(); //deve ser ".png" e não ".pnj" string[] extensoesPermitidas = { ".bmp", ".jpg", ".gif", ".png" }; //verifica se extensao está presente em extensoesPermitidas, se sim, retorna true retorno = extensoesPermitidas.Contains(extensao); if(!retorno) textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao; if (tamanhoArquivo > 204800) //200*1024 { textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo; retorno = false; } return retorno; }
- Marcado como Resposta jm_hack quinta-feira, 11 de fevereiro de 2016 02:59
-
Eu não entendi qual seria a utilidade do segundo for. Poderia me explicar como imaginaria essa implementação com o segundo for?
Uma coisa que observei é que falta limpar a variável textoUpload quando passa pelo else
else { textoUpload = ""; retorno = true; break; }
Seu código poderia ficar assim (mudando um pouco a lógica, já que você está praticando a questão de lógica)
retorno = false; textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao; for (int i = 0; i < extensoesPermitidas.Length; i++) if (string.Equals(extensao, extensoesPermitidas[i])) { textoUpload = ""; retorno = true; break; } //colocaria mais for aqui para ficar encadeado?? if (tamanhoArquivo > 200000) { textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo; retorno = false; }
- Editado Cesar Cassiano Schimanco sexta-feira, 12 de fevereiro de 2016 02:00 retorno = false;
- Marcado como Resposta jm_hack sexta-feira, 12 de fevereiro de 2016 03:33
Todas as Respostas
-
Modifiquei um pouco o seu validaUpload. Você estava testando com um arquivo de que extensão e qual tamanho?
1Kb = 1024 byte, então 200Kb = 200*1204 = 204800
você estava utilizando uma extensão ".pnj", mas na verdade acho que deveria ser ".png".
public Boolean validaUpload() { Boolean retorno = true; var tamanhoArquivo = FileUpload1.PostedFile.ContentLength; // tamanho em bytes var extensao = System.IO.Path.GetExtension(nomeArquivo).ToLower(); //deve ser ".png" e não ".pnj" string[] extensoesPermitidas = { ".bmp", ".jpg", ".gif", ".png" }; //verifica se extensao está presente em extensoesPermitidas, se sim, retorna true retorno = extensoesPermitidas.Contains(extensao); if(!retorno) textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao; if (tamanhoArquivo > 204800) //200*1024 { textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo; retorno = false; } return retorno; }
- Marcado como Resposta jm_hack quinta-feira, 11 de fevereiro de 2016 02:59
-
-
Com .jpg mesmo ah desculpa ai eu coloquei esse erro proposital .pnj para ver se dava erro so no .png e nao no tamanho. eu estou testando com extensoes variadas para dar o minimo possivel de erro, por enquanto so com os formatos .jpg .gif e .png
- Editado jm_hack quinta-feira, 11 de fevereiro de 2016 02:56
-
-
Entendi, mas você testou o código?
Ainda sobre extensões existe uma variação do jpg, que é o jpeg. Este exemplo valida extensões e funciona:
http://cbsa.com.br/post/verificar-a-extensao-do-arquivo-durante-um-upload-em-aspnet.aspxA variável textoUpload está vazia antes de passar pelo validaUpload()? Talvez ela já possua essa mensagem...
-
-
testei sim deu certo aqui, bom eu acrescentei aqui no codigo seria assim?:
try
{
textoUpload = ""; // aqui antes de validar a varivel esta vazia
if (validaUpload())
{
FileUpload1.PostedFile.SaveAs(caminhoCompleto);
lbStatus.Text = nomeArquivo + " Arquivo enviado com Sucesso!";
}
else
lbStatus.Text = "Error: " + textoUpload; -
-
ei mano sem encher muito o saco mais ja enchendo rsrs, eu gostaria de implementar este exemplo com o for, porem o que achas que devo fazer criar um for encadeado ou o que? veja:
string[] extensoesPermitidas = { ".bmp", ".jpg", ".gif", ".pnj" };
for (int i = 0; i < extensoesPermitidas.Length; i++)
if (!string.Equals(extensao, extensoesPermitidas[i]))
{
textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao;
retorno = false;
}
else
{
retorno = true;
break;
}
//colocaria mais for aqui para ficar encadeado??
if (tamanhoArquivo > 200000)
{
textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo;
retorno = false;
} -
Eu não entendi qual seria a utilidade do segundo for. Poderia me explicar como imaginaria essa implementação com o segundo for?
Uma coisa que observei é que falta limpar a variável textoUpload quando passa pelo else
else { textoUpload = ""; retorno = true; break; }
Seu código poderia ficar assim (mudando um pouco a lógica, já que você está praticando a questão de lógica)
retorno = false; textoUpload = " Nao foi enviada pois o formato é invalido, so aceita o tipo . gif OU .jpg a extensao desse arquivo e : " + extensao; for (int i = 0; i < extensoesPermitidas.Length; i++) if (string.Equals(extensao, extensoesPermitidas[i])) { textoUpload = ""; retorno = true; break; } //colocaria mais for aqui para ficar encadeado?? if (tamanhoArquivo > 200000) { textoUpload += " Nao pode ser enviado seu tamanho é muito grande, seu tamanho é " + tamanhoArquivo; retorno = false; }
- Editado Cesar Cassiano Schimanco sexta-feira, 12 de fevereiro de 2016 02:00 retorno = false;
- Marcado como Resposta jm_hack sexta-feira, 12 de fevereiro de 2016 03:33
-