none
Download de arquivo zipado RRS feed

  • Pergunta

  • Olá pessoal

    Estou com certa dificuldade de fazer o download de um arquivo zipado.

    Alguém sabe se há algum erro no meu código? Lembrando que está pegando o caminho correto.

          FileInfo informacao = new FileInfo(caminho);
          if (info.Exists)
          {
            HttpContext.Current.Response.Clear();
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + informacao .Name + "\"");
            HttpContext.Current.Response.Charset = "iso-8859-1";
            HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            HttpContext.Current.Response.ContentType = "application/zip";
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.WriteFile(info.FullName);
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.Close();
          }
          else
          {
            return false;        
          }
          return true;
    



    Wagner Freitas Técnico em Informática - IFES
    quinta-feira, 14 de julho de 2011 09:02

Respostas

  • Wagner, utilize algum destes 2 métodos que eu desenvolvi:

     

            /// <summary>
            /// Realiza o download de um arquivo qualquer em uma página
            /// </summary>
            /// <param name="filePath">Caminho físico completo do arquivo</param>
            /// <param name="fileName">Nome completo do arquivo a ser salvo</param>
            public virtual void DownloadFile(string filePath, string fileName)
            {
                if (string.IsNullOrWhiteSpace(filePath) || string.IsNullOrWhiteSpace(fileName)) return;

                try
                {
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.AddHeader("content-disposition", string.Concat("attachment;filename=", fileName));
                    HttpContext.Current.Response.Charset = string.Empty;
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.ContentEncoding = Encoding.Default;
                    EnableViewState = false;

                    HttpContext.Current.Response.WriteFile(fileName);
                    HttpContext.Current.Response.Flush();
                }
                catch { }
            }

            /// <summary>
            /// Realiza o download de um array de bytes de um arquivo em uma página
            /// </summary>
            /// <param name="file">byte array do arquivo</param>
            /// <param name="fileName">Nome completo do arquivo a ser salvo</param>
            public virtual void DownloadFile(byte[] file, string fileName)
            {
                if (file == null || file.Length <= 0 || string.IsNullOrWhiteSpace(fileName)) return;

                try
                {
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.AddHeader("content-disposition", string.Concat("attachment;filename=", fileName));
                    HttpContext.Current.Response.Charset = string.Empty;
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.ContentEncoding = Encoding.Default;
                    EnableViewState = false;

                    HttpContext.Current.Response.BinaryWrite(file);
                    HttpContext.Current.Response.Flush();
                }
                catch { }
            }

     

    Estão comentados e testados. Boa sorte.

     

    Abs


    Rodolfo Paoni
    • Sugerido como Resposta Rodolfo Paoni quinta-feira, 14 de julho de 2011 11:46
    • Marcado como Resposta Harley Araujo sexta-feira, 22 de julho de 2011 11:03
    quinta-feira, 14 de julho de 2011 11:46
  • Olá Júlio

    Isso que é o mais interessante. Não dispara nenhum erro.

    Alguma coisa que falta?

     


    Wagner Freitas Técnico em Informática - IFES

    Mude

    HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.WriteFile(info.FullName);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.Close();

    para
    HttpContext.Current.Response.WriteFile(info.FullName); HttpContext.Current.Response.Flush();

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    • Marcado como Resposta Harley Araujo sexta-feira, 22 de julho de 2011 11:03
    quinta-feira, 14 de julho de 2011 12:37
    Moderador

Todas as Respostas

  • Como vai Wagner,

    ele está retornando alguma erro, se sim especifique o erro pra podermos te ajudar.

    Se a resposta foi útil pra você, colabore com o fórum marcando como resposta esta sugestão, obrigado!

    Júlio Cesar Cosmo, MCP, MCTS - Influenciador Sharepoint, Influenciadores Microsoft

    http://juliocosmo.wordpress.com

    quinta-feira, 14 de julho de 2011 10:47
  • Olá Júlio

    Isso que é o mais interessante. Não dispara nenhum erro.

    Alguma coisa que falta?

     


    Wagner Freitas Técnico em Informática - IFES
    quinta-feira, 14 de julho de 2011 10:58
  • Wagner, utilize algum destes 2 métodos que eu desenvolvi:

     

            /// <summary>
            /// Realiza o download de um arquivo qualquer em uma página
            /// </summary>
            /// <param name="filePath">Caminho físico completo do arquivo</param>
            /// <param name="fileName">Nome completo do arquivo a ser salvo</param>
            public virtual void DownloadFile(string filePath, string fileName)
            {
                if (string.IsNullOrWhiteSpace(filePath) || string.IsNullOrWhiteSpace(fileName)) return;

                try
                {
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.AddHeader("content-disposition", string.Concat("attachment;filename=", fileName));
                    HttpContext.Current.Response.Charset = string.Empty;
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.ContentEncoding = Encoding.Default;
                    EnableViewState = false;

                    HttpContext.Current.Response.WriteFile(fileName);
                    HttpContext.Current.Response.Flush();
                }
                catch { }
            }

            /// <summary>
            /// Realiza o download de um array de bytes de um arquivo em uma página
            /// </summary>
            /// <param name="file">byte array do arquivo</param>
            /// <param name="fileName">Nome completo do arquivo a ser salvo</param>
            public virtual void DownloadFile(byte[] file, string fileName)
            {
                if (file == null || file.Length <= 0 || string.IsNullOrWhiteSpace(fileName)) return;

                try
                {
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Response.AddHeader("content-disposition", string.Concat("attachment;filename=", fileName));
                    HttpContext.Current.Response.Charset = string.Empty;
                    HttpContext.Current.Response.ContentType = "application/octet-stream";
                    HttpContext.Current.Response.ContentEncoding = Encoding.Default;
                    EnableViewState = false;

                    HttpContext.Current.Response.BinaryWrite(file);
                    HttpContext.Current.Response.Flush();
                }
                catch { }
            }

     

    Estão comentados e testados. Boa sorte.

     

    Abs


    Rodolfo Paoni
    • Sugerido como Resposta Rodolfo Paoni quinta-feira, 14 de julho de 2011 11:46
    • Marcado como Resposta Harley Araujo sexta-feira, 22 de julho de 2011 11:03
    quinta-feira, 14 de julho de 2011 11:46
  • Olá Júlio

    Isso que é o mais interessante. Não dispara nenhum erro.

    Alguma coisa que falta?

     


    Wagner Freitas Técnico em Informática - IFES

    Mude

    HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.WriteFile(info.FullName);
        HttpContext.Current.Response.Flush();
        HttpContext.Current.Response.Close();

    para
    HttpContext.Current.Response.WriteFile(info.FullName); HttpContext.Current.Response.Flush();

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    • Marcado como Resposta Harley Araujo sexta-feira, 22 de julho de 2011 11:03
    quinta-feira, 14 de julho de 2011 12:37
    Moderador