views:

50

answers:

2

I want to download a PDF file from a SQL Server database which is stored in a binary column. There is a LinkButton on an aspx page. The event handler of this button looks like this:

protected void LinkButtonDownload(object sender, EventArgs e)
{
    ...
    byte[] aByteArray;
    // Read binary data from database into this ByteArray
    // aByteArray has the size: 55406 byte

    Response.ClearHeaders();
    Response.ClearContent();
    Response.BufferOutput = true;

    Response.AddHeader("Content-Disposition", "attachment; filename=" + "12345.pdf");
    Response.ContentType = "application/pdf";

    using (BinaryWriter aWriter = new BinaryWriter(Response.OutputStream))
    {
        aWriter.Write(aByteArray, 0, aByteArray.Length);
    }
}

A "File Open/Save dialog" is offered in my browser. When I store this file "12345.pdf" to disk, the file has a size of 71523 Byte. The additional 16kB at the end of the PDF file are the HTML code of my page (as I can see when I view the file in an editor). I am confused because I was believing that ClearContent and ClearHeaders would ensure that the page content is not sent together with the file content.

What am I doing wrong here?

Thanks for help!

+3  A: 

I think you want a Response.End at the end of this method.

John Saunders
Great, thanks, that was easy to fix! I knew that this had to be a beginner mistake. (You've beaten Ted by one minute.)
Slauma
+3  A: 

In a quick glance, you're missing Response.End();

Ted