C# IE在请求完成之前提交文件下载
我试图将一个文件提交给浏览器下载,但我遇到了一个奇怪的问题,即Internet Explorer在HTTP请求完成之前将文件下载提交给用户 这是我的密码:C# IE在请求完成之前提交文件下载,c#,.net,internet-explorer,download,httpresponse,C#,.net,Internet Explorer,Download,Httpresponse,我试图将一个文件提交给浏览器下载,但我遇到了一个奇怪的问题,即Internet Explorer在HTTP请求完成之前将文件下载提交给用户 这是我的密码: protected void btnSubmit_Click(object sender, EventArgs e) { var client = new System.Net.WebClient(); Byte[] buffer = client.DownloadData(pdfUrl); if (buffer !
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不知道内容类型头;它仅在请求完成后接收此消息。我不认为这是问题所在,但值得注意。无论问题是什么,我认为激励问题只是一个转移视线的问题。在文件下载完成之前提示保存是完全正常的。假设您正试图下载一个5GB文件,您真的想等到整个文件下载完毕后才有机会说该怎么处理它吗?我得出这个结论的原因是,如果我等到HTTP请求完成后,再单击“打开”,文件就会完全打开。