ASP强制下载txt文件,而不是发送回源文件
本文关键字:源文件 下载 txt 文件 ASP | 更新日期: 2023-09-27 17:59:31
我在ASP中有一个函数,它返回一个TXT文件。
我希望用户下载该文件,但当我执行Response.Redirect("/Dir/Dir/TextFilePath.txt");
时,浏览器希望继续显示它
所以我发现,如果你把这个添加到标题中,它会强制下载
Response.AddHeader("content-disposition",
"attachment;filename=/Dir/Dir/TextFilePath.txt");
这确实会强制下载文件,只有一个陷阱。
该文件是aspx源代码,而不是我的txt文件。。。。它的名称是正确的,但它绝对不是txt文件。
这里是在asp.net中下载文件的正确方法。注意"正确的方式"而不是"正确的方法",你可以用其他方式做,但这个对我有效。
try
{
Response.Clear();
Response.ClearHeaders();
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=" + _Filename);
Response.AddHeader("Content-Type", "application/Word");
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Length", _FileLength_in_bytes);
Response.BinaryWrite(_Filedata_bytes);
Response.End();
}
catch (ThreadAbortException)
{ }
finally
{
}
上面的例子通过将字文件作为字节数组发送来传输它。你不必这样做,但它是有效的。
此外,我想为任何决定使用我的方法的人补充一点,该将向Response.End()
抛出ThreadAbortException
。这是一个已知的问题,它不会影响任何内容,所有内容都被正确执行,但异常仍然被抛出,因此必须捕获它。
您不能从发出重定向的页面影响为重定向提供的URL的标头。我怀疑你真的想做这样的事情:
var responseText =
File.ReadAllText(Server.MapPath("~/Dir/Dir/TextFilePath.txt"));
Response.ContentType="text/plain";
Response.AddHeader("content-disposition",
"attachment;filename=TextFilePath.txt");
Response.Output.Write(responseText);
Response.End();
你试过这样的东西吗?
this.Response.AddHeader("content-disposition", "attachment;filename=" + file);
Response.TransmitFile( Server.MapPath(fileName) );
Response.End();