• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET附件弹窗下载

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

      前段时间做项目,本来附件下载直接一个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位模拟什么的。

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap