ASP Force下载txt文件而不是发回源代码

时间:2014-04-22 12:13:45

标签: c# asp.net

我在ASP中有一个返回TXT文件的函数。

我希望用户下载该文件,但浏览器希望在我Response.Redirect("/Dir/Dir/TextFilePath.txt");

时继续显示该文件

所以我发现,如果你将它添加到标题,它会强制下载

    Response.AddHeader("content-disposition", 
                      "attachment;filename=/Dir/Dir/TextFilePath.txt");

这个DOES强制下载文件,只有一个问题。

该文件是aspx源代码而不是我的txt文件....它的名称正确,但绝对不是txt文件。

3 个答案:

答案 0 :(得分:2)

这是在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
{
}

上面的例子通过将字文件作为字节数组发送来发送字文件。 你不必这样做,但它的工作原理。

我还想为任何决定使用我的方法的人添加, 这ThreadAbortException处抛出Response.End()。 它是一个已知的问题而且它什么都没有影响,一切都正确执行但是异常仍然被抛出,所以它必须被捕获。

答案 1 :(得分:1)

您不能影响从发布重定向的页面为重定向提供的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();

答案 2 :(得分:0)

你尝试过这样的事吗?

this.Response.AddHeader("content-disposition", "attachment;filename=" + file);

Response.TransmitFile( Server.MapPath(fileName) );
Response.End();