Usuário com melhor resposta
converter byte[] em pdf

Pergunta
-
Ola Pessoal, estou gravando um pdf no banco de formar byte[], mas não estou conseguindo converter novamente para o pdf, estou usando o seguinte código...
string diretorio = "e:/home/dominio/web/app/pdf/"; FileUpload1.SaveAs(@diretorio + FileUpload1.FileName); string arquivo_servidor = diretorio + FileUpload1.FileName; if (System.IO.File.Exists(arquivo_servidor)) { // binario e grava no banco.... byte[] bytes = System.IO.File.ReadAllBytes(arquivo_servidor); using (var ctx = new vitacontabilidEntities()) { var c = new arquivo { arquivoBinario = bytes, nomeArquivo = TextBox1.Text, }; ctx.AddToarquivo(c); ctx.SaveChanges(); } // depois apaga na pasta... System.IO.File.Delete(arquivo_servidor); Label1.Text = "Sucesso !"; } }
eu salvo e depois o excluo.. para recuperar estou usando esse código, ele baixa mas não um arquivo pdf
using (var ctx = new Entities()) { string texto = TextBox2.Text; byte[] data = new byte[]{0,0,0,0}; var documents = (from c in ctx.arquivo where c.nomeArquivo == texto select new { c.arquivoBinario, c.nomeArquivo }).Single(); data = (byte[]) documents.arquivoBinario.ToArray(); Response.Clear(); Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0"); Response.AddHeader("Pragma", "no-cache"); Response.AddHeader("Content-Type", "application/force-download"); Response.AddHeader("Content-Transfer-Encoding", "binary\n"); Response.AddHeader("Content-Disposition", "attachment; filename=" + documents.nomeArquivo); Response.BinaryWrite(data); Response.End(); } }
Espero que possam me ajudar
Respostas
-
Eu fiz um exemplo: só uma coisa eu guardo sempre a Extensão do arquivo!
Código ASPX:
<form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUploadArquivo" runat="server" /> <asp:Button ID="ButEnviar" runat="server" Text="Enviar" OnClick="ButEnviar_Click" /> </div> <div> <asp:GridView ID="GridViewArquivos" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal"> <Columns> <asp:BoundField DataField="Id" HeaderText="Codigo" /> <asp:BoundField DataField="arquivoName" HeaderText="Nome" /> <asp:BoundField DataField="arquivoTipo" HeaderText="Tipo de Arquivo" /> <asp:HyperLinkField DataNavigateUrlFields="Id" DataNavigateUrlFormatString="WebArquivoAbrir.ashx?Id={0}" HeaderText="Abrir" Text="Abrir" /> </Columns> <FooterStyle BackColor="White" ForeColor="#333333" /> <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="White" ForeColor="#333333" /> <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" /> <SortedAscendingCellStyle BackColor="#F7F7F7" /> <SortedAscendingHeaderStyle BackColor="#487575" /> <SortedDescendingCellStyle BackColor="#E5E5E5" /> <SortedDescendingHeaderStyle BackColor="#275353" /> </asp:GridView> </div> </form>
Código Fonte de gravação:
public partial class WebArquivo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Grid(); } } protected void Grid(AppEntities db = null) { if (db == null) { db = new AppEntities(); } GridViewArquivos.DataSource = db.Arquivo.ToList(); GridViewArquivos.DataBind(); } protected void ButEnviar_Click(object sender, EventArgs e) { if (FileUploadArquivo.HasFile) { using (AppEntities db = new AppEntities()) { Arquivo arq = new Arquivo(); arq.arquivoName = FileUploadArquivo.FileName; arq.arquivoTipo = FileUploadArquivo.PostedFile.ContentType; arq.arquivoBinario = FileUploadArquivo.FileBytes; db.Arquivo.Add(arq); db.SaveChanges(); Grid(db); } } } }
Agora para fazer o Download do Arquivo fiz num Arquivo "ashx"
using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebAppArquivo.Model; namespace WebAppArquivo { /// <summary> /// Summary description for WebArquivoAbrir /// </summary> public class WebArquivoAbrir : IHttpHandler { public void ProcessRequest(HttpContext context) { int Id = 0; if (context.Request["Id"] != null && int.TryParse(context.Request["Id"].ToString(), out Id)) { AppEntities db = new AppEntities(); Arquivo arq = db.Arquivo.Find(Id); if (arq != null) { /*context.Response.Clear(); context.Response.ContentType = arq.arquivoTipo; context.Response.BinaryWrite(arq.arquivoBinario);*/ context.Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0"); context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Content-Type", "application/force-download"); context.Response.AddHeader("Content-Transfer-Encoding", "binary\n"); context.Response.AddHeader("Content-Disposition", "attachment; filename=" + arq.arquivoName); context.Response.ContentType = arq.arquivoTipo; context.Response.BinaryWrite(arq.arquivoBinario); } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } public bool IsReusable { get { return false; } } } }
O que ta comentando funciona também e abre o arquivo se tiver a extensão no próprio navegador!
Mas funcionou certinho!!!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 13:31
- Editado Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 13:32 alt
- Marcado como Resposta Marcos Bazilio sexta-feira, 1 de novembro de 2013 08:07
Todas as Respostas
-
-
-
-
-
-
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 12:36
-
-
Eu fiz um exemplo: só uma coisa eu guardo sempre a Extensão do arquivo!
Código ASPX:
<form id="form1" runat="server"> <div> <asp:FileUpload ID="FileUploadArquivo" runat="server" /> <asp:Button ID="ButEnviar" runat="server" Text="Enviar" OnClick="ButEnviar_Click" /> </div> <div> <asp:GridView ID="GridViewArquivos" runat="server" AutoGenerateColumns="False" BackColor="White" BorderColor="#336666" BorderStyle="Double" BorderWidth="3px" CellPadding="4" GridLines="Horizontal"> <Columns> <asp:BoundField DataField="Id" HeaderText="Codigo" /> <asp:BoundField DataField="arquivoName" HeaderText="Nome" /> <asp:BoundField DataField="arquivoTipo" HeaderText="Tipo de Arquivo" /> <asp:HyperLinkField DataNavigateUrlFields="Id" DataNavigateUrlFormatString="WebArquivoAbrir.ashx?Id={0}" HeaderText="Abrir" Text="Abrir" /> </Columns> <FooterStyle BackColor="White" ForeColor="#333333" /> <HeaderStyle BackColor="#336666" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#336666" ForeColor="White" HorizontalAlign="Center" /> <RowStyle BackColor="White" ForeColor="#333333" /> <SelectedRowStyle BackColor="#339966" Font-Bold="True" ForeColor="White" /> <SortedAscendingCellStyle BackColor="#F7F7F7" /> <SortedAscendingHeaderStyle BackColor="#487575" /> <SortedDescendingCellStyle BackColor="#E5E5E5" /> <SortedDescendingHeaderStyle BackColor="#275353" /> </asp:GridView> </div> </form>
Código Fonte de gravação:
public partial class WebArquivo : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { Grid(); } } protected void Grid(AppEntities db = null) { if (db == null) { db = new AppEntities(); } GridViewArquivos.DataSource = db.Arquivo.ToList(); GridViewArquivos.DataBind(); } protected void ButEnviar_Click(object sender, EventArgs e) { if (FileUploadArquivo.HasFile) { using (AppEntities db = new AppEntities()) { Arquivo arq = new Arquivo(); arq.arquivoName = FileUploadArquivo.FileName; arq.arquivoTipo = FileUploadArquivo.PostedFile.ContentType; arq.arquivoBinario = FileUploadArquivo.FileBytes; db.Arquivo.Add(arq); db.SaveChanges(); Grid(db); } } } }
Agora para fazer o Download do Arquivo fiz num Arquivo "ashx"
using System; using System.Collections.Generic; using System.Linq; using System.Web; using WebAppArquivo.Model; namespace WebAppArquivo { /// <summary> /// Summary description for WebArquivoAbrir /// </summary> public class WebArquivoAbrir : IHttpHandler { public void ProcessRequest(HttpContext context) { int Id = 0; if (context.Request["Id"] != null && int.TryParse(context.Request["Id"].ToString(), out Id)) { AppEntities db = new AppEntities(); Arquivo arq = db.Arquivo.Find(Id); if (arq != null) { /*context.Response.Clear(); context.Response.ContentType = arq.arquivoTipo; context.Response.BinaryWrite(arq.arquivoBinario);*/ context.Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0"); context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Content-Type", "application/force-download"); context.Response.AddHeader("Content-Transfer-Encoding", "binary\n"); context.Response.AddHeader("Content-Disposition", "attachment; filename=" + arq.arquivoName); context.Response.ContentType = arq.arquivoTipo; context.Response.BinaryWrite(arq.arquivoBinario); } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } public bool IsReusable { get { return false; } } } }
O que ta comentando funciona também e abre o arquivo se tiver a extensão no próprio navegador!
Mas funcionou certinho!!!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 13:31
- Editado Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 13:32 alt
- Marcado como Resposta Marcos Bazilio sexta-feira, 1 de novembro de 2013 08:07
-
-
Tentei esse exemplo..., mas não tive sucesso... estou usando entity para as consultas..
Amigo eu te fiz um exemplo! eu também uso entity!
Agora lógico o meu ta diferente em algumas partes diferente do seu!
Por favor! estude o código e tente resolver do mesmo jeito que eu fiz!!!
Esse código é exemploooooooooooooo!!!
Fúlvio Cezar Canducci Dias -
-
-
- Editado Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 15:02
-
-
-
-
é que você ta colocando seu código em Button eu acho!
Realmente é com arquivo ashx Exemplos: http://www.bufaloinfo.com.br/artigos/artigo200605.asp
Fiz um video com imagens: assista quem sabe clarea: http://www.youtube.com/watch?v=UxZ2v7Yd9Jo
A idéia é a mesma o que difere é a extensão!
Fúlvio Cezar Canducci Dias- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 18:03
-
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias quarta-feira, 30 de outubro de 2013 18:53
-
-
- Sugerido como Resposta Fulvio Cezar Canducci Dias sábado, 2 de novembro de 2013 11:50
- Editado Fulvio Cezar Canducci Dias sábado, 2 de novembro de 2013 12:02
-
-
no meu código esse find dá erro... e o Id que percorre os metodos .... ele é de onde?
Bom se você utilizar Entity pode usar o Where, FirstOrDefault e passar na expressão!
o Id é numero da chave primária! o identificador!
Agora eu não posso dizer nada porque desconheço sua camada de persistência! você me disse que era Entity então use e traga o registro da melhor forma e como sabe!!!
Fúlvio Cezar Canducci Dias -
Valeu, obrigado pelas dicas e vídeo, muito bem feito, mas mesmo assim não consegui exibir o arquivo, meu código ficou assim:
public void ProcessRequest(HttpContext context) { int idArquivo = 0; if (context.Request["idArquivo"] != null && int.TryParse(context.Request["idArquivo"].ToString(), out idArquivo)) { vitacontabilidEntities db = new vitacontabilidEntities(); var arq = db.arquivo.Where(p => p.idArquivo == idArquivo).FirstOrDefault(); if (arq != null) { //context.Response.Clear(); //context.Response.ContentType = arq.tipoArquivo; //context.Response.BinaryWrite(arq.arquivoBinario); context.Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0"); context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Content-Type", "application/force-download"); context.Response.AddHeader("Content-Transfer-Encoding", "binary\n"); context.Response.AddHeader("Content-Disposition", "attachment; filename=" + arq.nomeArquivo); context.Response.ContentType = arq.tipoArquivo; context.Response.BinaryWrite(arq.arquivoBinario); } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } public bool IsReusable { get { return false; } } } }
e para converter
protected void ButEnviar_Click(object sender, EventArgs e) { if (FileUploadArquivo.HasFile) { using (vitacontabilidEntities db = new vitacontabilidEntities()) { arquivo arq = new arquivo(); arq.nomeArquivo = FileUploadArquivo.FileName; arq.tipoArquivo = FileUploadArquivo.PostedFile.ContentType; arq.arquivoBinario = FileUploadArquivo.FileBytes; db.arquivo.AddObject(arq); db.SaveChanges(); Grid(db); } } }
ele grava no banco o binário, mas quando tento recuperar.... ele diz que o arquivo não pode ser exibido...
-
Valeu, obrigado pelas dicas e vídeo, muito bem feito, mas mesmo assim não consegui exibir o arquivo, meu código ficou assim:
public void ProcessRequest(HttpContext context) { int idArquivo = 0; if (context.Request["idArquivo"] != null && int.TryParse(context.Request["idArquivo"].ToString(), out idArquivo)) { vitacontabilidEntities db = new vitacontabilidEntities(); var arq = db.arquivo.Where(p => p.idArquivo == idArquivo).FirstOrDefault(); if (arq != null) { //context.Response.Clear(); //context.Response.ContentType = arq.tipoArquivo; //context.Response.BinaryWrite(arq.arquivoBinario); context.Response.AddHeader("Cache-Control", "no-cache, must-revalidate, post-check=0, pre-check=0"); context.Response.AddHeader("Pragma", "no-cache"); context.Response.AddHeader("Content-Type", "application/force-download"); context.Response.AddHeader("Content-Transfer-Encoding", "binary\n"); context.Response.AddHeader("Content-Disposition", "attachment; filename=" + arq.nomeArquivo); context.Response.ContentType = arq.tipoArquivo; context.Response.BinaryWrite(arq.arquivoBinario); } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } else { context.Response.ContentType = "text/plain"; context.Response.Write("Erro de Conversão"); } } public bool IsReusable { get { return false; } } } }
e para converter
protected void ButEnviar_Click(object sender, EventArgs e) { if (FileUploadArquivo.HasFile) { using (vitacontabilidEntities db = new vitacontabilidEntities()) { arquivo arq = new arquivo(); arq.nomeArquivo = FileUploadArquivo.FileName; arq.tipoArquivo = FileUploadArquivo.PostedFile.ContentType; arq.arquivoBinario = FileUploadArquivo.FileBytes; db.arquivo.AddObject(arq); db.SaveChanges(); Grid(db); } } }
ele grava no banco o binário, mas quando tento recuperar.... ele diz que o arquivo não pode ser exibido...
Fúlvio Cezar Canducci Dias -
-
-
o script
Estrutura da tabela `arquivo` -- CREATE TABLE IF NOT EXISTS `arquivo` ( `idArquivo` int(11) NOT NULL AUTO_INCREMENT, `nomeArquivo` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, `arquivoBinario` varbinary(255) DEFAULT NULL, `tipoArquivo` varchar(50) COLLATE latin1_general_ci NOT NULL, `cliente` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, PRIMARY KEY (`idArquivo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=28 ;
-
o script
Estrutura da tabela `arquivo` -- CREATE TABLE IF NOT EXISTS `arquivo` ( `idArquivo` int(11) NOT NULL AUTO_INCREMENT, `nomeArquivo` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, `arquivoBinario` varbinary(255) DEFAULT NULL, `tipoArquivo` varchar(50) COLLATE latin1_general_ci NOT NULL, `cliente` varchar(50) COLLATE latin1_general_ci DEFAULT NULL, PRIMARY KEY (`idArquivo`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=28 ;
Achei o erroooooooooooooooooooooooooooooooooooooo
se ta de brincadeira amigo um PDF concerteza vai ter muito mais do que 255 posições é por isso que não abre!
kkkk
então coloque em
`arquivoBinario` varbinary(max) DEFAULT NULL
Fúlvio Cezar Canducci Dias -
-
-
-
- Editado Fulvio Cezar Canducci Dias segunda-feira, 4 de novembro de 2013 14:59