none
Baixar arquivo com extensão pdf em uma gridview RRS feed

  • Pergunta

  • Tenho uma página onde tenho um arquivo em formato pdf, quando o usuário clica ele abre o arquivo e eu queria que ele baixasse o arquivo e não abrisse o arquivo como faço isso ? Fiz os testes tanto no IE como no Chrome e os dois fizeram do mesmo jeito.

    Junior

    segunda-feira, 20 de julho de 2015 18:50

Respostas

  • Junior,

    Acho que é isso que você quer:

    protected void lbtnCabecalhoAjuda_Click(object sender, EventArgs e)
            {
                string caminhoArquivo = Page.Request.PhysicalApplicationPath + "/Ajuda/Manual.pdf";
                string nomeArquivo = new FileInfo(caminhoArquivo).Name;
                byte[] arquivo = File.ReadAllBytes(caminhoArquivo);
    
                Response.Clear();
                Response.ClearHeaders();
                Response.ClearContent();
                Response.ContentType = "application/octet-stream";
    
                Response.AddHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + " \"");
                Response.AddHeader("Content-Length", arquivo.Length.ToString());
    
                Response.BinaryWrite(arquivo);
    
                Response.Flush();
                Response.Close();
                Response.End();
            }
    

    Abraço,


    Carlos Eduardo Ferreira

    segunda-feira, 20 de julho de 2015 19:45

Todas as Respostas

  • Junior,

    Dê uma olhada nesses dois artigos:

    http://stackoverflow.com/questions/6794255/html-download-a-pdf-file-instead-of-opening-them-in-browser-when-clicked

    http://www.codeproject.com/Articles/15649/Create-and-download-text-file-from-a-web-page

    Abraço,


    Carlos Eduardo Ferreira

    segunda-feira, 20 de julho de 2015 19:20
  • Carlos eu lí seus artigos, eu tenho fisicamente em uma pasta no servidor o arquivo, mostro os arquivos em um gridview com um link o usuário clica no link do arquivo que ele quer baixar, o que quero é no caso de arquivos em .pdf,.txt,.xls,etc ele não abrir o arquivo e sim baixa-lo.

    No segundo artigo que vc mandou ele fala em baixar mais vou testar.


    Junior

    segunda-feira, 20 de julho de 2015 19:35
  • Junior,

    Acho que é isso que você quer:

    protected void lbtnCabecalhoAjuda_Click(object sender, EventArgs e)
            {
                string caminhoArquivo = Page.Request.PhysicalApplicationPath + "/Ajuda/Manual.pdf";
                string nomeArquivo = new FileInfo(caminhoArquivo).Name;
                byte[] arquivo = File.ReadAllBytes(caminhoArquivo);
    
                Response.Clear();
                Response.ClearHeaders();
                Response.ClearContent();
                Response.ContentType = "application/octet-stream";
    
                Response.AddHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + " \"");
                Response.AddHeader("Content-Length", arquivo.Length.ToString());
    
                Response.BinaryWrite(arquivo);
    
                Response.Flush();
                Response.Close();
                Response.End();
            }
    

    Abraço,


    Carlos Eduardo Ferreira

    segunda-feira, 20 de julho de 2015 19:45
  • Eduardo, realmente dá certo como vc postou, mais tem um problema, eu mostro o(s) arquivo(s) em um gridview e tenho uma coluna com um templatefield que tem um hyperlink e no evento rowDataBound que eu trato isso, como vc postou funciona mais ele não me mostra a gridview, hoje em teste eu só tenho um arquivo mais futuramente terei mais e nesse caso como eu faço ?

    Junior

    terça-feira, 21 de julho de 2015 11:18
  • Junior,

    Não entendi...

    O gridview não é exibido?


    Carlos Eduardo Ferreira

    terça-feira, 21 de julho de 2015 11:35
  • olha o meu codigo

    protected void Gv_Importante_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.EmptyDataRow)
                {
                    int rowindex = e.Row.DataItemIndex;
                    string nmarqu = Convert.ToString(Gv_Importante.DataKeys[rowindex].Values["nmarqu"]);
                                    
                    HyperLink link = (HyperLink)e.Row.FindControl("HyperLink1");
                    link.NavigateUrl = "../../Arquivos/importantes/Gerenciais/Arquivos/" + nmarqu.Trim();
                    string nomeArquivo = new FileInfo(link.NavigateUrl).Name;
                    byte[] arquivo = File.ReadAllBytes(Server.MapPath(link.NavigateUrl));
                    
                    Response.Clear();
                    Response.ClearHeaders();
                    Response.ClearContent();
                    Response.ContentType = "application/octet-stream";
                    Response.AddHeader("Content-Disposition", "attachment; filename=\"" + nomeArquivo + " \"");
                    Response.AddHeader("Content-Length", arquivo.Length.ToString());
    
                    Response.BinaryWrite(arquivo);
    
                    Response.Flush();
                    Response.Close();
                    Response.End();
                    
                    link.Text = nmarqu.Trim();
                }
            }


    Junior

    • Marcado como Resposta Junior_luiz terça-feira, 21 de julho de 2015 14:47
    • Não Marcado como Resposta Junior_luiz terça-feira, 21 de julho de 2015 17:45
    terça-feira, 21 de julho de 2015 11:40
  • Por que você está fazendo isso no RowDataBound?

    Por que você não cria uma nova página só para fazer esse download?


    Carlos Eduardo Ferreira

    terça-feira, 21 de julho de 2015 11:43
  • Como falei é uma página onde vai existir vários arquivos a serem baixados, mostro esses arquivos no gridview ai o usuário escolhe qual quer baixar. Como eu fiz anteriormente no click do hyperlink do gridview ele abre o pdf e eu não queria, queria que ele mostre a opção de baixar ou abrir, como vc fez.

    Junior

    terça-feira, 21 de julho de 2015 11:51
  • Você pode criar uma página Download.aspx e por esse código no Page_Load e recebe o nome do arquivo via QueryString, Session, etc.

    E no gridview você chamada esse página via JavaScript(window.open).

    Seria uma solução...


    Carlos Eduardo Ferreira

    terça-feira, 21 de julho de 2015 11:59
  • Estou pensando em mudar, tirar o hyperlink e colocar um button

    Junior

    terça-feira, 21 de julho de 2015 12:02
  • Resolvi, tirei o hyperlink e coloquei um linkbutton, funcionou perfeito.


    Junior

    terça-feira, 21 de julho de 2015 14:47
  • Eu marquei errado. Já acertei

    Junior

    terça-feira, 21 de julho de 2015 17:45