尝试将文件发送到浏览器进行下载,但是在摆弄它超过一个小时之后,似乎无法使其正常工作。
我正在使用以下代码
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也应该用于数据库吗?
提前感谢您的帮助!
答案 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堆栈。