none
Ajuda com o FileUpload!! RRS feed

  • 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;

    quinta-feira, 11 de fevereiro de 2016 02:07

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
    quinta-feira, 11 de fevereiro de 2016 02:36
  • 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
    sexta-feira, 12 de fevereiro de 2016 01:58

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
    quinta-feira, 11 de fevereiro de 2016 02:36
  • Por exemplo no caso do envio de uma foto .jpg de 202 k e pra dar erro so no tamanho e nao no formato!!!
    quinta-feira, 11 de fevereiro de 2016 02:40
  • 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
    quinta-feira, 11 de fevereiro de 2016 02:43
  • Vlw ai mano deu certo aqui, e que sou iniciante sabe e minha lógica não e lá essa coisas rsrsrs
    quinta-feira, 11 de fevereiro de 2016 03:00
  • 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.aspx

    A variável textoUpload está vazia antes de passar pelo validaUpload()? Talvez ela já possua essa mensagem...


    quinta-feira, 11 de fevereiro de 2016 03:01
  • Maravilha, no início é assim mesmo, mas depois pega o jeito e a lógica flui naturalmente.

    Abraço

    quinta-feira, 11 de fevereiro de 2016 03:04
  • 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;

    quinta-feira, 11 de fevereiro de 2016 03:13
  • Parece correto.
    quinta-feira, 11 de fevereiro de 2016 03:47
  • 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;

                    }

    sexta-feira, 12 de fevereiro de 2016 01:07
  • 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
    sexta-feira, 12 de fevereiro de 2016 01:58
  • Meu Deus era realmente isso que faltava que vacilo que eu dei :(, muito obrigado agora sim deu Certo e preciso melhorar muito essa logica...
    sexta-feira, 12 de fevereiro de 2016 02:08