如何防止通过url下载文件

SinGooCMS 2008-05-12 10:40:56
我要说的不是盗链问题.
比如一个文件地址

http://192.168.100.111/StoryUploadsFiles/mp3/bcxw.mp3

如果是未注册用户就提示不能下载???
网上查了下都说得不太详细.有哪位了解的??
...全文
668 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsoyxl 2010-10-09
  • 打赏
  • 举报
回复
添加一个类 继承IHttpHandler
public class Handera:IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.Redirect("~/error.html");
}
public bool IsReusable
{
get { }
}
}

配置webconfig
<httpHandlers>
<add verb="*" path="*.avi" type="WebApplication9.Handera,WebApplication9"/>
<add verb="*" path="*.rm" type="WebApplication9.Handera,WebApplication9"/>
oulawang 2010-01-22
  • 打赏
  • 举报
回复
关注此问题..
清风道禅 2008-05-13
  • 打赏
  • 举报
回复
路过··
didamsma 2008-05-12
  • 打赏
  • 举报
回复
留名关注
SinGooCMS 2008-05-12
  • 打赏
  • 举报
回复
有人知道么?
yanqing5266 2008-05-12
  • 打赏
  • 举报
回复
只要服务器承担的起,就可以使用的
John1CSDN 2008-05-12
  • 打赏
  • 举报
回复
配置web.config文件

<!--
通过 <authentication> 节可以配置 ASP.NET 使用的
安全身份验证模式,
以标识传入的用户。
-->

<authentication mode="Forms">
<forms name=".Travel2Auth" loginUrl="~/LoginPage.aspx"/>
</authentication>

<location path="Admin"><!--Admin是要登陆成功后才能进入的文件夹-->
<system.web>
<authorization>
<allow roles="powerUsers,administrators"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
Hesperus 2008-05-12
  • 打赏
  • 举报
回复
可以用一个处理程序判断是否登陆,然后用文件流的方式进行下载
popeyepower 2008-05-12
  • 打赏
  • 举报
回复
实际上还是防盗链问题....只不过多了一个对SESSION的判断而已.
LS已经解释得很清楚了.
sjett 2008-05-12
  • 打赏
  • 举报
回复
<a href="down.ashx?filepath=path/xxx/sss.rar&fileName=xxxx">下载</a>

down.ashx文件
1,判断用户权限
2,得到下载服务器地址
3,传输filepath参数给下载服务器,得到数据流,输出,并指定fileName

string path = context.Request.QueryString["path"];
string fileName = context.Request.QueryString["filename"];

context.Response.ContentType = "application/octet-stream";

// 文件重命名
context.Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0};charset=GB2312",
System.Web.HttpUtility.UrlEncode(string.IsNullOrEmpty(fileName) ? System.IO.Path.GetFileName(path) : fileName, System.Text.Encoding.UTF8)));

string physicalPath = context.Server.MapPath("~/" + path);

if (!System.IO.File.Exists(physicalPath))
{
throw new System.IO.FileNotFoundException();
}
context.Response.WriteFile(physicalPath);



zjmotion 2008-05-12
  • 打赏
  • 举报
回复
两种方法:

一,URL重写.添加对MP3的映射.此方法不需要隐藏真实文件路径,所以不需要用数据库保存文件路径信息.但增加服务器负担.
二,cloudgamer说到的方法,把文件放在非web目录,然后通过一个页面读取并输出.需要用数据库保存文件路径.
cloudgamer 2008-05-12
  • 打赏
  • 举报
回复
文件放在用户不能访问的地方
下载时后台读问题发送到客户端
datahandler2 2008-05-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 liyong11111 的回复:]
web.config里做安全性验证配置

XML code<authenticationmode="Forms"><formsloginUrl="Default.aspx"name=".ASPXAUTH"protection="All"></forms></authentication><authorization><denyusers="?"/></authorization>
[/Quote]

====================
我想说的原理和这位兄弟说的差不多。你把mp3文件统一放到某个文件夹,然后通过Forms验证就可以防止未登陆就可以访问下载了。
job_2006 2008-05-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 twtbo18274 的回复:]
那他直接把地址:http://192.168.100.111/StoryUploadsFiles/mp3/bcxw.mp3 复制到浏览器不通过统一的下载页下载怎么办?
[/Quote]

在列表页根本就不会让其看到源地址
财富实验室 2008-05-12
  • 打赏
  • 举报
回复
看我写的blog:http://blog.csdn.net/buaabyy/archive/2008/04/18/2303342.aspx
liyong11111 2008-05-12
  • 打赏
  • 举报
回复
web.config里做安全性验证配置

<authentication mode="Forms">
<forms loginUrl="Default.aspx" name=".ASPXAUTH" protection="All">
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
twtbo18274 2008-05-12
  • 打赏
  • 举报
回复
那他直接把地址:http://192.168.100.111/StoryUploadsFiles/mp3/bcxw.mp3 复制到浏览器不通过统一的下载页下载怎么办?
job_2006 2008-05-12
  • 打赏
  • 举报
回复
建一个统一的下载页面,在下载页面里作判断,如果没有登录就不允许下载
twtbo18274 2008-05-12
  • 打赏
  • 举报
回复
帮你顶下^-^我也想知道。
SinGooCMS 2008-05-12
  • 打赏
  • 举报
回复
最后顶一下.高手都睡觉去了!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧