在ASP.NET中将文本下载为文件
我试图从屏幕下载一些文本输出作为文本文件。 以下是代码。 它在某些页面上工作,而在其他页面上根本不工作。 任何人都可以建议这里有什么问题吗?
protected void Button18_Click(object sender, EventArgs e){ Response.Clear(); Response.Buffer = true; Response.ContentType = "text/plain"; Response.AppendHeader("content-disposition", "attachment;filename=output.txt"); StringBuilder sb = new StringBuilder(); string output = "Output"; sb.Append(output); sb.Append("\r\n"); Response.Write(sb.ToString()); }
正如Joshua已经提到的,您需要将文本写入输出流(Response)。 另外,不要忘记在此之后调用Response.End()。
protected void Button18_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); string output = "Output"; sb.Append(output); sb.Append("\r\n"); string text = sb.ToString(); Response.Clear(); Response.ClearHeaders(); Response.AppendHeader("Content-Length", text.Length.ToString()); Response.ContentType = "text/plain"; Response.AppendHeader("Content-Disposition", "attachment;filename=\"output.txt\""); Response.Write(text); Response.End(); }
编辑1:添加更多细节
编辑2:我正在阅读其他SOpost,用户建议在文件名周围加上引号:
Response.AppendHeader("content-disposition", "attachment;filename=\"output.txt\"");
资料来源: https : //stackoverflow.com/a/12001019/558486
如果这是您的实际代码,您永远不会将文本写入响应流,因此浏览器永远不会收到任何数据。
至少,你应该需要
Response.Write(sb.ToString());
将文本数据写入响应。 此外,作为额外的好处,如果您事先知道长度,则应使用Content-Length
标头提供它,以便浏览器显示下载进度。
你也设置Response.Buffer = true;
作为方法的一部分但从未显式刷新响应以将其发送到浏览器。 尝试在write语句后添加Response.Flush()
。