在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
发的随笔,不能每个都上首页,微微蛋疼啊。啊哈。这次再发一个关于附件下载的。 前段时间做项目,本来附件下载直接一个a标记找到文件就可以了。但是呢,每次打开txt啊,图片啊。都是直接浏览器打开。我们测试都说了,你们那咋搞的,我一点就打开了。想下载也没办法(搞了个自定义右键菜单),我说那是你系统问题。关我电脑毛事啊。。人说,你看别人的都可以。。。然后我就伤不起了。。就有了这么一小段代码。 话说,测试跟开发真是天生冤家啊。好好的代码,本地一点事没有,一到测试环境,各种奇葩BUG,每次都先跟他们说,清缓存,清缓存的。。。我恨测试。 其实很简单的代码,就是加一个全局Hanlder。
AttachmentDownloadHanlder
1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Linq; 5 using System.Text; 6 using System.Web; 7 8 namespace Wanda.SICI.UI.Web 9 { 10 public class AttachmentDownloadHanlder : IHttpHandler 11 { 12 public void ProcessRequest(HttpContext context) 13 { 14 string path = context.Request.PhysicalPath; 15 16 try 17 { 18 context.Response.Charset = "UTF-8"; 19 context.Response.ContentEncoding = Encoding.UTF8; 20 context.Response.HeaderEncoding = Encoding.UTF8; 21 context.Response.AppendHeader("Content-disposition", 22 "attachment; filename=" + 23 HttpUtility.UrlEncode(Path.GetFileName(path), Encoding.UTF8)); 24 context.Response.WriteFile(path); 25 } 26 catch (Exception ex) 27 { 28 context.Response.Write("下载文件出错,原因:" + ex.Message); 29 } 30 finally 31 { 32 context.Response.End(); 33 } 34 } 35 36 public bool IsReusable { get { return false; } } 37 } 38 }
然后再添加一个配置文件,配置文件放到你的附件根目录就可以了。
web.config
1 <?xml version="1.0" encoding="utf-8"?> 2 <configuration> 3 <system.web> 4 <httpHandlers> 5 <add verb="*" path="*" type="Wanda.SICI.UI.Web.AttachmentDownloadHanlder"/> 6 </httpHandlers> 7 </system.web> 8 <system.webServer> 9 <handlers> 10 <add name="AttachmentDownloadHanlder" verb="*" path="*" 11 modules="IsapiModule" 12 scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" 13 resourceType="File" 14 /> 15 </handlers> 16 </system.webServer> 17 </configuration> 如果报错的话,就把%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll改成 %windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 就可以了。 最开始的时候,一直500,后来一查,说什么要启用iis的32位模拟什么的。 这样每次下载,都会把附件标记,不会使用浏览器打开了。 |
请发表评论