6

尝试将文件发送到浏览器进行下载,但在摆弄了一个多小时后似乎无法使其正常工作。

我正在使用以下代码

    string filePath = Server.MapPath("/exports/test.txt");
    string downloadedFileName = "test.txt";

    Response.ContentType = "text/plain";
    Response.AppendHeader("content-disposition", "attachment; filename=" + downloadedFileName);
    Response.TransmitFile(filePath);
    Response.End();

它下载到浏览器,但文件中填充了来自页面的 HTML,而不是文件的内容。如果我写出 server.MapPath 的目录,则该文件位于该目录中。

我最终将使用它来将 accdb 或 mdb 数据库发送到浏览器,我只是使用 txt,因为很容易在网上找到概念证明示例。如果有的话,我需要在 ContentType 之外进行什么更改。ContentType 也应该用于数据库吗?

提前感谢您的帮助!

4

3 回答 3

3

这可能是因为响应流中已经有一些输出排队等待传输。在传输文件之前,您必须先清除它。如果您使用的是 ASP.NET Web 表单,这将破坏您的页面,因为回发行为将不再起作用。

请参阅相关的 SO 问题和答案。

于 2013-11-04T23:08:37.277 回答
3

这就是它通常对我有用的方式:

Response.Clear();

if (Request.Browser != null && Request.Browser.Browser == "IE")
    sFileName = HttpUtility.UrlPathEncode(sFileName);

// Response.Cache.SetCacheability(HttpCacheability.Public); // that's upon you

Response.AddHeader("Content-Disposition", "attachment;filename=\"" + sFileName + "\"");
                                                            // ^                   ^
// Response.AddHeader("Content-Length", new FileInfo(sFilePath).Length.ToString()); // upon you 
Response.WriteFile(sFilePath);

Response.Flush();
Response.End();
于 2013-11-04T23:11:30.330 回答
0

尝试使用 .ashx 通用处理程序绕过大部分 ASP.NET 堆栈将文件发送到浏览器。

于 2013-11-04T23:10:56.330 回答