LER PDF ASP.NET OU C#

MESTRE 16/11/2015 11:50:12
#453966
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
     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..
DS2T 16/11/2015 12:08:58
#453969
Resposta escolhida
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();
MESTRE 17/11/2015 07:16:57
#454014
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
DS2T 17/11/2015 08:32:07
#454016
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!


MESTRE 18/11/2015 07:27:56
#454075
Obrigado cara me ajudou muito!

Valeu!
Tópico encerrado , respostas não são mais permitidas