代码之家  ›  专栏  ›  技术社区  ›  Dan H

从网页下载文本作为文件

  •  2
  • Dan H  · 技术社区  · 16 年前

    我正在从网站下载文本,希望用户能够将其保存为文件。所以,我有下面的代码可以做到这一点。

    protected void DownloadFile(string fileName, string content)
    {
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        Response.ContentType = "text/plain";
        Response.Write(content);
        Response.End();
    }
    

    我遇到的问题是,在运行此代码之后,我会得到一个异常。我相信这是因为我调用了response.end()。因此,每次用户下载文件时,都会将其重定向到一般错误页,因为所有一般异常都会重定向到该页。

    关于如何将文本写入文件而不得到此错误,有什么想法吗?如果我移除response.end(),我会得到我的文本,然后是其余的httpresponse文本,但我不会得到错误。

    谢谢。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Joel Etherton    16 年前

    不要打电话 Response.End() . 无论您是否打算填充头,在填充完头之后仍然有代码要在服务器端运行。而是考虑使用 Response.Flush() 并允许页面完成。另一种选择是使用httphandler(ashx)文件而不是aspx/ascx文件。这将为您提供对响应更基本的访问,因此您应该能够在不产生任何影响的情况下结束。

        2
  •  1
  •   Nate CSS Guy    16 年前

    首先,如果此代码位于.aspx文件中,则需要将其移出到.ashx文件中。 其次,在移到.ashx之后,您可以简单地写入输出流并完成操作,不需要 Response.End();

    这是我开始使用的链接: http://dotnetperls.com/ashx-handler --没什么大不了的。它只是删除了一堆ASP.NET“页面”开销。


    理想情况下,您应该有一个带有列表的页面,以及一个指向“download.ashx”文件的链接/按钮。然后在查询字符串上给它传递一个记录ID,这样它就可以执行查找和response.write调用。

        3
  •  0
  •   Hogan    16 年前

    也许你想打电话 Response.Output.Write() 相反?

    推荐文章