none
Download de arquivo a partir de array de Bytes. RRS feed

  • Pergunta

  • Preciso disponibilizar um arquivo para download a partir de um array de bytes que trago do BD. No caso não posso gravar em disco para depois colocá-lo para download. Minha idéia é já gerar o arquivo e jogar na interface para download. Pesquisei sobre o binary.write mas não achei uma forma que resolva minha necessidade.

    Como devo proceder?

    Obrigado.

    quarta-feira, 22 de dezembro de 2010 16:30

Respostas

  • Seguinte

    você precisa fazer uma página que receba a informação do dado que precisa ser baixado, então ele irá montar o arquivo em memoria e retornar. recomendo que você crie uma página que receba parametros atraves de QueryString, por exemplo /downloads.aspx?Id=124

    aonde o Id se referenciaria a linha da tabela de arquivos que você quer baixar. Nesta tabela é bom conter o nome do arquivo e o Mime Type dele.

    no exemplo abaixo, mostro como retornar uma arquivo para download. A primeira parte do exemplo é ficticia, apenas pego um arquivo meu e transformo em bytes , o resto é o exemplo efetivo, aonde do array de bytes eu jogo para download

    using System;
    
    public partial class Download : System.Web.UI.Page
    {
      byte[] bOriginal;
      protected void Page_Load(object sender, EventArgs e)
      {
        //transformo um arquivo em array de bytes
        System.IO.FileStream fStream = System.IO.File.Open(@"C:\Algoritmo.jpg", System.IO.FileMode.Open);
        bOriginal = new byte[fStream.Length];
        fStream.Read(bOriginal, 0, (int)fStream.Length);
        fStream.Close();
    
        #region EXEMPLO EFETIVO
        //Fazendo de conta que recebi os bytes do BD, capturo e transfomo em Stream
        Response.Clear();
        Response.AddHeader("Content-disposition", "attachment; filename=Foto.jpg"); //Informa o nome do arquivo.extensão
        Response.ContentType = "image/jpg"; //Informa o Mime Type do Arquivo
        Response.BinaryWrite(bOriginal);
        #endregion
    
      }
    }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Brayann Luiz terça-feira, 4 de janeiro de 2011 17:55
    quarta-feira, 22 de dezembro de 2010 19:16

Todas as Respostas

  • Seguinte

    você precisa fazer uma página que receba a informação do dado que precisa ser baixado, então ele irá montar o arquivo em memoria e retornar. recomendo que você crie uma página que receba parametros atraves de QueryString, por exemplo /downloads.aspx?Id=124

    aonde o Id se referenciaria a linha da tabela de arquivos que você quer baixar. Nesta tabela é bom conter o nome do arquivo e o Mime Type dele.

    no exemplo abaixo, mostro como retornar uma arquivo para download. A primeira parte do exemplo é ficticia, apenas pego um arquivo meu e transformo em bytes , o resto é o exemplo efetivo, aonde do array de bytes eu jogo para download

    using System;
    
    public partial class Download : System.Web.UI.Page
    {
      byte[] bOriginal;
      protected void Page_Load(object sender, EventArgs e)
      {
        //transformo um arquivo em array de bytes
        System.IO.FileStream fStream = System.IO.File.Open(@"C:\Algoritmo.jpg", System.IO.FileMode.Open);
        bOriginal = new byte[fStream.Length];
        fStream.Read(bOriginal, 0, (int)fStream.Length);
        fStream.Close();
    
        #region EXEMPLO EFETIVO
        //Fazendo de conta que recebi os bytes do BD, capturo e transfomo em Stream
        Response.Clear();
        Response.AddHeader("Content-disposition", "attachment; filename=Foto.jpg"); //Informa o nome do arquivo.extensão
        Response.ContentType = "image/jpg"; //Informa o Mime Type do Arquivo
        Response.BinaryWrite(bOriginal);
        #endregion
    
      }
    }
    


    Olavo Oliveira Neto
    Se for útil marque como resposta e faça um Developer feliz :)
    • Marcado como Resposta Brayann Luiz terça-feira, 4 de janeiro de 2011 17:55
    quarta-feira, 22 de dezembro de 2010 19:16
  • Simples e Objetivo, funcionou perfeitamente, obrigado pela ajuda !!! :)
    segunda-feira, 11 de setembro de 2017 17:36