ASP.NET 附件弹窗下载

发的随笔,不能每个都上首页,微微蛋疼啊。啊哈。这次再发一个关于附件下载的。

前段时间做项目,本来附件下载直接一个a标记找到文件就可以了。但是呢,每次打开txt啊,图片啊。都是直接浏览器打开。我们测试都说了,你们那咋搞的,我一点就打开了。想下载也没办法(搞了个自定义右键菜单),我说那是你系统问题。关我电脑毛事啊。。人说,你看别人的都可以。。。然后我就伤不起了。。就有了这么一小段代码。

话说,测试跟开发真是天生冤家啊。好好的代码,本地一点事没有,一到测试环境,各种奇葩BUG,每次都先跟他们说,清缓存,清缓存的。。。我恨测试。

其实很简单的代码,就是加一个全局Hanlder。

AttachmentDownloadHanlder
 using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
 using System.Web;
                                
 namespace Wanda.SICI.UI.Web
 {
     public class AttachmentDownloadHanlder : IHttpHandler
     {
         public void ProcessRequest(HttpContext context)
         {
             string path = context.Request.PhysicalPath;
                                
             try
             {
                 context.Response.Charset = "UTF-8";
                 context.Response.ContentEncoding = Encoding.UTF8;
                 context.Response.HeaderEncoding = Encoding.UTF8;
                 context.Response.AppendHeader("Content-disposition",
                                               "attachment; filename=" +
                                               HttpUtility.UrlEncode(Path.GetFileName(path), Encoding.UTF8));
                 context.Response.WriteFile(path);
             }
             catch (Exception ex)
             {
                 context.Response.Write("下载文件出错,原因:" + ex.Message);
             }
             finally
             {
                 context.Response.End();
             }
         }
                                
         public bool IsReusable { get { return false; } }
     }
 }

然后再添加一个配置文件,配置文件放到你的附件根目录就可以了。

web.config
 <?xml version="1.0" encoding="utf-8"?>
 <configuration>
   <system.web>
     <httpHandlers>
       <add verb="*" path="*" type="Wanda.SICI.UI.Web.AttachmentDownloadHanlder"/>
     </httpHandlers>
   </system.web>
   <system.webServer>
     <handlers>
       <add name="AttachmentDownloadHanlder" verb="*" path="*"
         modules="IsapiModule"
         scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll"
         resourceType="File"
            />
     </handlers>
   </system.webServer>
 </configuration>

如果报错的话,就把%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll改成

%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 就可以了。

最开始的时候,一直500,后来一查,说什么要启用iis的32位模拟什么的。

这样每次下载,都会把附件标记,不会使用浏览器打开了。

知识共享许可协议
《ASP.NET 附件弹窗下载》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     162.76ms