我有一个生成动态文件供下载的页面,并使用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,
但我的缓存控制功能是正确的。 有什么想法吗?
答案 0 :(得分:3)
见这里的答案:
基本上,替换:
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()