<a href="../help/一键录入格式.txt">下载模版</a> 一开始的时候可以实现的。而现在 直接打开了那个文件? 怎么回事?
首先a标签是用来打开指定href,不是用来下载 你给出的路径xx.txt浏览器会直接向iis请求这个文件(页面),然而你并没有在后台做处理所以iis按照默认的方式发送这个文件(Content-Type:text/plain),然后浏览器识别到这个txt/plain是直接呈现内容,不会下载
解决方案:
一般来说下载应该提供下载函数
public ActionResult Download() { string path = Server.MapPath("/1.txt"); return File(path, "application/octet-stream", "1.txt"); //application/octet-stream这个就是content-type告诉浏览器是下载而不是txt/plain打开 }
<a href="/Home/Download" target="_blank">下载</a>
提供下载函数的好处是你可以在代码中限制下载权限,公用就在download中价格参数,下载指定文件
Download() 在新打开的页面的 load 中 运行?ActionResult 是是什么东西?
@凡是无绝对!: 他的意思是,你不应该直接将文件路径交给浏览器,让浏览器通过扩展名解析文件。而应该在你的后台建立一个方法,是用方法来读取文件,然后包装为你自己定义的数据类型,交给浏览器。而且在方法中还可以加入权限控制。
@凡是无绝对!: 这个是mvc的action,就相当于一个页面或者是一般处理程序,你要是用的webform就写一个一般处理程序
public class download : IHttpHandler { public void ProcessRequest(HttpContext context) { string name = "1.txt"; context.Response.ContentType = "application/octet-stream"; context.Response.AddHeader("Content-Disposition", "attachment; filename=" + context.Server.UrlEncode(name)); string path = context.Server.MapPath("/" + name); context.Response.WriteFile(path); } public bool IsReusable { get { return false; } } }
@飞扬的尘埃: 那个方法的返回值是啥啊、 那个方法 报错了。 我真不明白这个ActionResult 咋 回事? 我不是用的mvc 。、
@凡是无绝对!: 一般处理程序你不晓得? 看不出上面那段代码是一般处理程序的结构?
@jio92: 我 知道。
@jio92: 这个还得再页面中还得处理么? 怎么处理啊?
直接点击链接,浏览器会按照默认请求的ContentType进行文件处理,有个“另存为”选项我会乱说?
直接原因就是 IIS 中 .txt 扩展名文件的 mime-type 默认是 text/plain
而浏览器对 text/plain 类型数据的默认解析方式是直接显示内容。
那怎么解决啊?我看他们一般的处理方法是 生成压缩文件 。 。
@凡是无绝对!: 如上所述,在后台方法中读取文件,包装为你自己定义的数据类型,压缩包也好,其他可下载的数据流也好,都可以。
@飞扬的尘埃: 上述的代码是否 有问题。 我老是报错的。ActionResult 这个类型是什么我没看懂啊?好像是 mvc 里边的东西吧。
@凡是无绝对!: 那个是MVC的写法,后台处理文件的方法可以写在任意位置,请求下载的时候,可以调用这个方法就行。