Force browser to download PDF document instead of opening it

后端 未结 5 1560
太阳男子
太阳男子 2020-12-01 12:14

I want to make the browser download a PDF document from server instead of opening the file in browser itself. I am using C#.

Below is my sample code which I used. It

相关标签:
5条回答
  • 2020-12-01 12:46

    If you want to render the file(s) so that you could save them at your end instead of opening in the browser, you may try the following code snippet:

    //create new MemoryStream object and add PDF file’s content to outStream.
    MemoryStream outStream = new MemoryStream();
    
    //specify the duration of time before a page cached on a browser expires
    Response.Expires = 0;
    
    //specify the property to buffer the output page
    Response.Buffer = true;
    
    //erase any buffered HTML output
    Response.ClearContent();
    
    //add a new HTML header and value to the Response sent to the client
    Response.AddHeader(“content-disposition”, “inline; filename=” + “output.pdf”);
    
    //specify the HTTP content type for Response as Pdf
    Response.ContentType = “application/pdf”;
    
    //write specified information of current HTTP output to Byte array
    Response.BinaryWrite(outStream.ToArray());
    
    //close the output stream
    outStream.Close();
    
    //end the processing of the current page to ensure that no other HTML content is sent
    Response.End();
    

    However, if you want to download the file using a client application then you'll have to use the WebClient class.

    0 讨论(0)
  • 2020-12-01 12:51

    They are almost same in most of the cases but there is a difference:

    Add Header will replace the previous entry with the same key

    Append header will not replace the key, rather will add another one.

    0 讨论(0)
  • 2020-12-01 12:53

    I use this by setting inline parameter to true it will show in browser false it will show save as dialog in browser.

    public void ExportReport(XtraReport report, string fileName, string fileType, bool inline)
    {
        MemoryStream stream = new MemoryStream();
    
        Response.Clear();
    
        if (fileType == "xls")
            report.ExportToXls(stream);
        if (fileType == "pdf")
            report.ExportToPdf(stream);
        if (fileType == "rtf")
            report.ExportToRtf(stream);
        if (fileType == "csv")
            report.ExportToCsv(stream);
    
        Response.ContentType = "application/" + fileType;
        Response.AddHeader("Accept-Header", stream.Length.ToString());
        Response.AddHeader("Content-Disposition", String.Format("{0}; filename={1}.{2}", (inline ? "Inline" : "Attachment"), fileName, fileType));
        Response.AddHeader("Content-Length", stream.Length.ToString());
        //Response.ContentEncoding = System.Text.Encoding.Default;
        Response.BinaryWrite(stream.ToArray());
    
        Response.End();
    }
    
    0 讨论(0)
  • 2020-12-01 13:00

    You should look at the "Content-Disposition" header; for example setting "Content-Disposition" to "attachment; filename=foo.pdf" will prompt the user (typically) with a "Save as: foo.pdf" dialog, rather than opening it. This, however, needs to come from the request that is doing the download, so you can't do this during a redirect. However, ASP.NET offers Response.TransmitFile for this purpose. For example (assuming you aren't using MVC, which has other preferred options):

    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");
    Response.TransmitFile(filePath);
    Response.End(); 
    
    0 讨论(0)
  • 2020-12-01 13:01

    In case if we are trying to write a bytes array then we can use below one.

                Response.Clear();
                Response.ContentType = "application/pdf";
                Response.AppendHeader("Content-Disposition", "attachment; filename=file.pdf");
                Response.BufferOutput = true;
                Response.AddHeader("Content-Length", docBytes.Length.ToString());
                Response.BinaryWrite(docBytes);
                Response.End();
    
    0 讨论(0)
提交回复
热议问题