ASP C#将文件发送到客户端

时间:2013-11-04 23:00:40

标签: c# asp.net

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

我正在使用以下代码

    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也应该用于数据库吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

这可能是因为已经有一些排队在响应流中排队准备好进行传输。您必须先将其清除,然后才能传输文件。如果您正在使用ASP.NET Web表单,这会破坏您的页面,因为回发行为将不再有效。

请参阅related SO question并回答。

答案 2 :(得分:0)

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