我正在尝试将一个文件提供给浏览器,我遇到了一个奇怪的问题,即Internet Explorer在HTTP请求完成之前将文件下载呈现给用户。
这是我的代码:
protected void btnSubmit_Click(object sender, EventArgs e)
{
var client = new System.Net.WebClient();
Byte[] buffer = client.DownloadData(pdfUrl);
if (buffer != null)
{
Response.BufferOutput = true;
Response.Buffer = true;
Response.AddHeader("content-type", client.ResponseHeaders["content-type"]);
Response.AddHeader("Content-disposition", client.ResponseHeaders["content-disposition"]);
Response.BinaryWrite(buffer);
Response.Flush();
}
}
但是,在HTTP请求完成之前,将显示浏览器底部的“您是否要下载此文件”对话框。
这意味着如果用户在HTTP请求完成之前单击“打开”或“下载”,则会下载损坏或丢失的文件,从而导致错误。
我原以为将Response.Buffer
和Response.BufferOutput
设置为true
可以解决问题,但是在将文件提交给浏览器之前强制响应等待请求完成,但是事实并非如此。
我怀疑在Response.BinaryWrite
完成之前,该文件正在下载。
编辑:如果我在点击“打开/下载”之前等待HTTP请求完成,则文件打开/下载完全正常。
编辑2 :我注意到在HTTP请求正在处理时,IE不了解内容类型标头;只有在请求完成后才会收到此消息。我认为这不是问题,但值得注意。