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强制下载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();