我在服务器中有一个文件。
我想下载此文件。
我使用此代码
try
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.BufferOutput = true;
if (File.Exists(Server.MapPath("~/Upload/" + file)))
{
Response.AddHeader("Content-Disposition", "attachment; filename=" + file);
Response.ContentType = "application/octet-stream";
Response.WriteFile(("~/Upload/" + file));
Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
else
{
if (Request.UrlReferrer != null)
{
Type csType = GetType();
string jsScript = "alert('File Not Found');";
ScriptManager.RegisterClientScriptBlock(Page, csType, "popup", jsScript, true);
}
}
}
catch (Exception ex)
{
string errorMsg = ex.Message;
ScriptManager.RegisterClientScriptBlock(Page, GetType(), "popup", errorMsg, true);
}
但是当我使用它时,我收到错误
无法评估表达式,因为代码已优化或本机框位于调用堆栈之上。
代码
到Response.End();
如何下载所有类型的文件?
答案 0 :(得分:0)
这是Web窗体,MVC还是自定义IHttpHandler?
在任何情况下,您都不需要从您的函数中调用Response.End()
或HttpContext.Current.ApplicationInstance.CompleteRequest()
,只需return
,并确保没有其他内容写入回复。
答案 1 :(得分:0)
你试过了吗?
Response.TransmitFile(Server.MapPath("~/Upload/" + file));
而不是:
Response.WriteFile(("~/Upload/" + file));
你还应该删除BufferOutput(不Response.End()
Response.Flush()
的好主意