Usuário com melhor resposta
Download de arquivo a partir de array de Bytes.

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.
- Movido Ricardo OnedaModerator quarta-feira, 22 de dezembro de 2010 17:28 (De:.NET Development - Geral)
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
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
-