使用ASP.NET从服务器下载所有类型的文件

时间:2013-02-07 08:12:07

标签: asp.net

我在服务器中有一个文件。

我想下载此文件。

我使用此代码

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

如何下​​载所有类型的文件?

2 个答案:

答案 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()的好主意