ASP.NET Response.BinaryWrite文件下载是使用SSL阻止的

时间:2009-12-08 21:32:53

标签: asp.net

我有一个生成动态文件供下载的页面,并使用Response.BinaryWrite将其发送到客户端。

除非我们将其移至使用SSL的测试服务器,否则一切似乎都能正常工作。下载发生在一个新窗口中,我看到的(在IE7 / 8但不是chrome或FF)是选项卡打开,关闭,但没有显示文件对话。

这是完整的标题写:

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()

我确信我的问题是提到的问题here

但我的缓存控制功能是正确的。 有什么想法吗?

3 个答案:

答案 0 :(得分:3)

见这里的答案:

C# BinaryWrite over SSL

基本上,替换:

Response.Clear();

与......

Response.ClearContent();
Response.ClearHeaders();

答案 1 :(得分:2)

我遇到了同样的问题,经过一定程度的调查后,我发现一篇关于codeproject的文章暗示IE下载被IE安全设置阻止了。如果您转到“工具” - >“Internet选项” - >“安全”选项卡并查看要访问的区域的“下载”选项,则需要将“自动提示文件下载”更改为“已启用”。 “Internet”区域默认设置为“已禁用”。这是我提到的文章的链接:http://www.codeproject.com/KB/aspnet/SecureFileDownload.aspx

答案 2 :(得分:1)

您是否尝试过更改或删除Expires或Pragma标头?通过SSL流式传输PDF时,以下代码适用于我:

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()