5

I have a page that generates a dynamic file for download, and sends it to the client using Response.BinaryWrite.

Everything seems to work fine, except when we moved it to a test server with SSL. The download happens in a new window, and what I'm seeing (in IE7/8 but not chrome or FF) is the tab opens, and closes, but no File Dialogue is shown.

Here's the complete header write:

Response.Clear()
        Response.Buffer = True
        Response.ContentType = "application/octet-stream"
        Response.AddHeader("Content-Length", abytFileData.Length.ToString)
        Response.AddHeader("cache-control", "private")
        Response.AddHeader("Expires", "0")
        Response.AddHeader("Pragma", "cache")
        Response.AddHeader("content-disposition", "attachment; filename=""" & pMsg!pstrFileName & """")
        Response.AddHeader("Accept-Ranges", "none")
        Response.BinaryWrite(abytFileData)
        Response.Flush()
        Response.End()

I thought for sure that my problem was what was mentioned here,

But my cache-control heade is correct. Any ideas?

Gaidin
  • 1,381
  • 3
  • 13
  • 19
  • maybe duplicate? http://stackoverflow.com/questions/419868/file-download-dialog-ie7-disappears – Dimi Takis Dec 08 '09 at 21:39
  • Didn't see that post, but the link I provided is similar. In his question he didn't specify the cache-control header as anything, which was causing his problem. In mine I'm specifying cache-control as private, which should work. – Gaidin Dec 08 '09 at 22:05
  • Your Expires: 0 or Pragma may be the culprit. You should consider removing them. – EricLaw Dec 27 '09 at 21:41

3 Answers3

3

See answer here:

C# BinaryWrite over SSL

Essentially, replace:

Response.Clear();

with ...

Response.ClearContent();
Response.ClearHeaders();
Community
  • 1
  • 1
Keith Adler
  • 20,880
  • 28
  • 119
  • 189
2

I've encountered the same problem and after some degree of investigation I found an article on codeproject suggesting that the download is being blocked by IE security settings. If you go to Tools->Internet Options->Security Tab and look at the Download options for the zone you are accessing, you need to change the "Automatic prompting for file downloads" to be Enabled. The "Internet" zone default setting for this is Disabled. Here's the link to the article I mentioned: http://www.codeproject.com/KB/aspnet/SecureFileDownload.aspx

  • Yep, this was the same conclusion I came to as well. Not very helpful in that the security setting for SSL connections is defaulted not to force the download prompt, and telling every single one of our users to change their security settings isn't really an option. What I ended up doing was instead of doing our download in a separate window, I did it in an iframe, so the IE security drop down warning was visible. – Gaidin Jan 15 '10 at 14:08
1

Have you tried changing or removing your Expires or Pragma headers? The following code works for me when streaming PDFs over SSL:

Response.Buffer = True
Response.ClearContent()
Response.ClearHeaders()
Response.AddHeader("Cache-Control", "max-age=3")
Response.AddHeader("Pragma", "public")
Response.ContentType = "application/pdf"
Response.AddHeader("Content-Disposition", "attachment; filename=file.pdf")
Response.AddHeader("Content-Length", mem_stream.Length.ToString)
Response.BinaryWrite(mem_stream.ToArray())
Response.Flush()
Response.End()
wweicker
  • 4,833
  • 5
  • 35
  • 60