我在ASP中有一个返回TXT文件的函数。
我希望用户下载该文件,但浏览器希望在我Response.Redirect("/Dir/Dir/TextFilePath.txt");
所以我发现,如果你将它添加到标题,它会强制下载
Response.AddHeader("content-disposition",
"attachment;filename=/Dir/Dir/TextFilePath.txt");
这个DOES强制下载文件,只有一个问题。
该文件是aspx源代码而不是我的txt文件....它的名称正确,但绝对不是txt文件。
答案 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();