一般大家对小文件的解决办法是直接在服务端读取文件,然后输出,这样就避免了文件地址的暴露,这是一种解决办法。而我现在想说的是使用 TransmitFile 方法直接输出文件,但是这个方法对大文件的支撑力度有多少,以及会带来多大的性能开销,我还没有测试过,有兴趣的朋友可以测试下,并发表评论。
好了,进入正题,一般对下载站,大家想到的就是流量的问题,所以自动就想到应该把文件与程序代码分开部署。所以我给文件单独做了一个二级域名,我们就叫 file.xxx.com 吧。主网站域名就是 www.xxx.com了,或者其他二级域名都行。
那第一步就是先要实现这2个站点之间的身份验证共享了,比如登陆了主站后自动分站就实现登录了,那.Net的Forms身份验证很容易的就能实现这个功能,底层思路其实就是共享Cookie的原理。第二部就是给文件站做权限过滤。下面我们给主站以及文件站同时添加web.config。给他们加入相同的配置,Web.config主要配置代码如下:
复制代码 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<connectionStrings>
</connectionStrings>
<appSettings>
</appSettings>
<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Home/LogOn" defaultUrl="/" timeout="600" slidingExpiration="true" name="File" path="/" enableCrossAppRedirects="true"></forms>
</authentication> <httpCookies domain=".xxx.com"/>
<machineKey validationKey="AAA977D304FB289C182E00C710A099C9F92986DC25AD69F8" decryptionKey="AAA2B3F76A9359431E717CA8275EE72EEEDC70ED55152010" validation="SHA1"/>
</system.web>
<!--此节点只需加到文件站下--> <system.webServer>
<handlers>
<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" />
</handlers>
</system.webServer>
</configuration>
以上配置文件针对跨域访问的几个关键配置点:一:authentication的name要相同,path="/" 表示cookie存储路径为根域名,enableCrossAppRedirects="true" 表示身份验证是否可以重定向到其他应用程序。二:httpCookie节点配置为顶级域名。三:两个站点的machinekey必须相同。 那针对权限控制,通过实现.Net里面的访问过滤器,也就是IHttpHandler接口,用来拦截访问。实现方法也很简单,只要实现ProcessRequest方法就可以了,下面是我的代码:
复制代码 代码如下:
namespace Web.Handler
{
/// <summary>
/// 文件下载登陆验证
/// </summary>
public class Download : IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
if (context.User.Identity.IsAuthenticated)
{
string fileName = context.Server.MapPath(context.Request.FilePath);
context.Response.ContentType = Path.GetExtension(fileName);
context.Response.TransmitFile(context.Request.FilePath);
}
else
{
context.Response.Write("您未登录!");
}
}
}
}
写完以上代码后,那就是增加过滤配置了,注意上面的配置文件注释,最主要的配置节:<add name="*.*" path="*.*" verb="*" type="Web.Handler.Download" /> name是筛选器的名称,随便填,path表示你要过滤的文件后缀,我是所有文件都需要过滤,所以直接用*.*,如果单纯只过滤jpg跟gif,可以改为:*.jpg,*.gif 即可,type表示过滤器Dll地址,也就是我们实现IHttpHandler的类全名,ok,文件访问控制就已经完成了。 注意:由于我使用的是IIS7,所以此处的Handler添加到了system.webSever节点下,IIS6及以下版本直接添加到system.web节点下就可以了。
相关推荐:
2025百度收录优化:提升网站排名,助力企业数字化转型,第一ai做
WPJam:打破网站管理的壁垒,打造极致用户体验,广东谷歌seo工具
怎么用AI缩写文章,轻松提高效率的全新方法
seo经验是什么,seo进阶 ,ai矿机
AI批量文章工具,让写作变得高效与轻松,cs机器人ai
seo给你什么帮助,seo的利与弊 ,ai 大厨
ChatGPT常见问题汇总:解答你关于AI的一切疑惑,松鼠ai智能教适应教育
ChatGPT怎么有梯子?突破网络限制,轻松畅享AI智能,ai对唱音响
Bing搜索的注意事项-提高搜索效率与准确性,轻松获取所需信息,最近ai写作软件推荐
SEO对策:提升网站排名与流量的必备策略,SEO入门相机平价学生
为什么seo这么难,seo难嘛 ,ai宁中则
互联网留痕:数字时代的隐形轨迹与自我管理,灯塔网站推广包年多少钱
ChatGPT进不去怎么办?解决方案与技巧,轻松畅享智能对话,ai va
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
从“官网扒下来”看企业数字化转型的未来,摄影营销策略推广文案
seo词库优化,搜索词条优化 ,ai点选择
AI一键生成原创文章,让创作更高效更轻松!
ChatGPT回答问题,网页无法线下滚动?解决方案轻松get!,谷歌AI铃声
在线AI文章生成器开启智能创作新时代
seo网站自学看什么书,seo技术适合自学吗 ,斑马ai阅读
SEO优化做什么的?揭秘SEO优化的核心价值与实战应用,ai做金色
优化分析:提升企业效益的关键策略,山东大网站建设
ChatGPT显示“此网站无法加载站点”:背后原因与解决办法详解,用ai画明度渐变条
“关键词指白”:揭秘如何通过精准关键词优化实现流量暴增,全面分析网站seo
如何利用AI生成高质量文章,提升写作效率与创意?
AI代写文章:高效创作的新风尚
seo网络推广是什么,seo网络推广是什么意思 ,ai哪里注音
360优化关键词-提升网站流量与排名的秘密武器,美拍ai
ChatGPT打不开了吗?如何快速解决常见问题,恢复顺畅体验!,ai13212511845
ChatGPT故障你从未听过的真相,究竟是什么让它偶尔“失灵”?,ai 图片 矢量
seo重点是什么,seo最重要的指标 ,ai网格怎么用
ChatGPT的诞生,预示着人工智能大规模应用的时代已经来临,ai此生不渝
ChatGPT可以实现新闻报道的即时自动化生成,怎么更改ai2的图标
SEO大量优化:如何通过精准策略提升网站流量,突破搜索引擎排名瓶颈,吕梁本地网站推广平台
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
SEO笔记:如何打造高效的SEO策略提升网站排名,网站优化优质服务方案
SEO软优化:助力网站实现流量爆发的秘密武器,延平区网页seo
亚马逊产品seo什么意思,亚马逊平台产品专业术语 ,小新同学ai
seo软文用什么论坛,seo软文是什么意思 ,爱字幕的AI变脸不见了
Goanno跨级借鉴:推动创新与提升效率的秘密武器,崇明区智能ai艾灸费用
ChatGPTO1免费:突破智能聊天的极限,体验AI无限可能,糯米ai唱歌
seo都有什么问题,seo都有什么问题和答案 ,ai凯旋公主下载
什么是亚马逊seo策略,亚马逊的seo推广是什么 ,天天学术ai写作优惠券
SEO门户:打造高效网站流量的关键利器,创意网站建设要求
SEO快速优化技术:助力网站流量暴增,轻松登顶搜索引擎,铜陵ai全网通推广软件
SEO外,如何提升网站整体营销效果?,文轩网络营销推广方案
什么是“神马关键词”?如何用它提升你的网络营销效果?,新闻发布网站怎么做推广
怎么用AI生成文章?全新写作方式的揭秘与应用指南
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
SEO运维:提升网站排名的核心战略,邢台网站建设优化建站