LER PDF ASP.NET OU C#
Fala galera beleza? tenho um pagina que grava o .PDF em Bytes num campo LONGBLOB no banco MYSQL.
Estou com dificuldade pare retornar esse .PDF num Grid com o botão Baixar.
tentei dessa forma:
o campo [Ô]pdf[Ô] é o campo na minha tabela onde eu faço um select e leio com o datareader
Só que preciso clicar no botão Download e baixar o .PDF.. sei que é muito mais fácil trabalhar com arquivo .Save e trabalhar com pastas e arquivos, já trabalho assim porém existe a necessidade de eu salvar o .PDF no banco e lê-lo e quando clicar em Download ele baixar esse .PDF..
Estou com dificuldade pare retornar esse .PDF num Grid com o botão Baixar.
tentei dessa forma:
o campo [Ô]pdf[Ô] é o campo na minha tabela onde eu faço um select e leio com o datareader
byte[] bytes = ((byte[])reader[[Ô]pdf[Ô]]);
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
arquivos.Add(new ListItem(base64String));
// Response.BinaryWrite((byte[])reader[[Ô]pdf[Ô]]);
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
arquivos.Add(new ListItem(base64String));
gridArquivos.DataSource = arquivos;
gridArquivos.DataSource = arquivos;
gridArquivos.DataBind();
Só que preciso clicar no botão Download e baixar o .PDF.. sei que é muito mais fácil trabalhar com arquivo .Save e trabalhar com pastas e arquivos, já trabalho assim porém existe a necessidade de eu salvar o .PDF no banco e lê-lo e quando clicar em Download ele baixar esse .PDF..
Uma vez que você já tem o array de bytes, basta criar o cabeçalho da requisição.
Response.Clear();
Response.ContentType = [Ô]application/pdf[Ô];
Response.AddHeader([Ô]content-disposition[Ô], [Ô]attachment; filename=NomeDoArquivo.pdf[Ô]);
Response.BinaryWrite(bytes);
Response.Flush();
Response.Clear();
Response.ContentType = [Ô]application/pdf[Ô];
Response.AddHeader([Ô]content-disposition[Ô], [Ô]attachment; filename=NomeDoArquivo.pdf[Ô]);
Response.BinaryWrite(bytes);
Response.Flush();
Citação::
Uma vez que você já tem o array de bytes, basta criar o cabeçalho da requisição.
Response.Clear();
Response.ContentType = [Ô]application/pdf[Ô];
Response.AddHeader([Ô]content-disposition[Ô], [Ô]attachment; filename=NomeDoArquivo.pdf[Ô]);
Response.BinaryWrite(bytes);
Response.Flush();
Opa DS2T muito obrigado pela resposta me ajudou muito porém como colocaria isso num grid? tenho um grid que carrega o nome do arquivo e tem um botão Download, daà teria que colocar esses Response no botão download porém como vou identificar por ex:
tenho um grid:
Nome Download
Pdf1 Clique Aqui para Download (linkbutton com imagem de download)
Pdf2 Clique Aqui para Download
Pdf3 Clique Aqui para Download
Pdf4 Clique Aqui para Download
clicou no: PDF ABC botão download 1 baixa o PDF ..
Pensei em utilizar um ArrayList e pegar o RowIndex do grid porém não sei se é a forma mais [Ô]correta[Ô] de se fazer isso..
Abraços
Minha recomendação é que você não adicione no Grid como está a fazer.
Não existe necessidade de recuperar os bytes do arquivo na hora de preencher o grid, só vai deixar tudo lento e consumindo recurso.
Inicialmente para carregar o Grid, você precisará de dois campos: Nome do arquivo e ID (Sendo que o ID, nem vai aparecer pro usuário).
AÃ basta no clique do botão, você recuperar o index da linha e consequentemente recuperar o ID.
Uma vez recuperado o ID referente ao arquivo selecionado, basta fazer a consulta no banco de dados consultando esse ID (Where ID=) e usar o código que passei anteriormente pra baixar.
PossÃveis dúvidas:
Como recupero o index da linha do grid?
Existem muitas formas de fazer isso, irei citar 3:
A primeira é você deixando o botão no ItemTemplate assim:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID=[Ô]Button1[Ô] runat=[Ô]server[Ô] Text=[Ô]Button[Ô]
OnClick=[Ô]EventoClickOcorreu[Ô] />
</ItemTemplate>
</asp:TemplateField>
E no code-behind colocar assim:
Protected Sub EventoClickOcorreu(sender AS Object, e As System.EventArgs)
Dim botao as Button = sender
Dim row As Gridviewrow = botao.NamingContainer
dim index As integer = row.rowindex[ô]recupero o index aqui, aà é só você fazer a consulta no banco e usar o código que te passei
End Sub
A segunda é você usar evento RowCommand. To com preguiça de digitar, mas você encontra vários exemplos na net hahaha
E a terceira é você colocar na propriedade DataNavigateUrlFormat como: RedirecionamentoDownload.aspx?id={0} o DataNavigateUrlField = [Ô]id[Ô] (supondo que seu campo id, chame id né hahaha). Obviamente, assim, você é obrigado a criar a página [Ô]RedirecionamentoDownload.aspx[Ô] e colocar seu código de download lá. O Id, você recupera fácil usando o objeto Request.
Beleza?
Falou!
Não existe necessidade de recuperar os bytes do arquivo na hora de preencher o grid, só vai deixar tudo lento e consumindo recurso.
Inicialmente para carregar o Grid, você precisará de dois campos: Nome do arquivo e ID (Sendo que o ID, nem vai aparecer pro usuário).
AÃ basta no clique do botão, você recuperar o index da linha e consequentemente recuperar o ID.
Uma vez recuperado o ID referente ao arquivo selecionado, basta fazer a consulta no banco de dados consultando esse ID (Where ID=) e usar o código que passei anteriormente pra baixar.
PossÃveis dúvidas:
Como recupero o index da linha do grid?
Existem muitas formas de fazer isso, irei citar 3:
A primeira é você deixando o botão no ItemTemplate assim:
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID=[Ô]Button1[Ô] runat=[Ô]server[Ô] Text=[Ô]Button[Ô]
OnClick=[Ô]EventoClickOcorreu[Ô] />
</ItemTemplate>
</asp:TemplateField>
E no code-behind colocar assim:
Protected Sub EventoClickOcorreu(sender AS Object, e As System.EventArgs)
Dim botao as Button = sender
Dim row As Gridviewrow = botao.NamingContainer
dim index As integer = row.rowindex[ô]recupero o index aqui, aà é só você fazer a consulta no banco e usar o código que te passei
End Sub
A segunda é você usar evento RowCommand. To com preguiça de digitar, mas você encontra vários exemplos na net hahaha
E a terceira é você colocar na propriedade DataNavigateUrlFormat como: RedirecionamentoDownload.aspx?id={0} o DataNavigateUrlField = [Ô]id[Ô] (supondo que seu campo id, chame id né hahaha). Obviamente, assim, você é obrigado a criar a página [Ô]RedirecionamentoDownload.aspx[Ô] e colocar seu código de download lá. O Id, você recupera fácil usando o objeto Request.
Beleza?
Falou!
Obrigado cara me ajudou muito!
Valeu!
Valeu!
Tópico encerrado , respostas não são mais permitidas