CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

新手提问:如何实现登陆后才能下载特定文件?

楼主division(好风长吟)2006-05-04 11:22:32 在 .NET技术 / ASP.NET 提问

开发环境:VS2005   ASP.NET   2.0+   C#   +   Sql   Server2000.  
  现在遇到的问题是:某个系统有大量的文件,要求必须是注册用户才能下载,但非注册用户一样能看到连接和实际文件地址,现在想请问大家,有没有比较好的方案能实现必须登陆后才能下载到文件?  
  说明一下:1.使用Session的办法我用过,但对能知道实际服务器文件路径的情况好象无效   2.文件太多,如果是每个文件添加响应事件的办法岂不是太麻烦?  
  头一次做这个方面的开发,很不熟悉。各位有思路的麻烦说说,有代码的更好。 问题点数:50、回复次数:18Top

1 楼jianyi0115(随意)回复于 2006-05-04 11:49:57 得分 10

系统有大量的文件,放在文件系统上?  
  要控制文件的访问:  
   
  1方案:)所有文件的访问都通过一个页面来访问,页面接受文件名,(不是具体路径),然后判断用户有无登陆,  
  若登陆,到某路径下把文件读出来,写道输出中.  
   
  2方案:)不要用页面处理文件,用一个httpHandler,其它同1  
  Top

2 楼division(好风长吟)回复于 2006-05-04 12:08:50 得分 0

谢谢1楼的方案,不过还是不太明白,能不能说得详细点?  
  我的需求说的更具体点就是:注册用户和非注册用户都能浏览页面A,A上面有doc文件B的连接,注册用户点击可以下载,非注册用户点击则转到注册页面或者错误提示,如果不用改写URL的方法(比如?id=XXXX)怎样可以实现以上方案,即使非注册用户知道实际服务器上文件的保存路径?  
  菜鸟问题,见笑了.....Top

3 楼division(好风长吟)回复于 2006-05-05 02:01:20 得分 0

我利用httpHandlers方法已经解决了直接下载和盗链的问题,但我的疑问是:如果我一个页面中有二三十个文件,难道要写二三十个点击事件的方法吗?有没有比较高效的方法??Top

4 楼jaliwey()回复于 2006-05-05 02:17:26 得分 1

upTop

5 楼hxw001()回复于 2006-05-05 03:10:30 得分 1

markTop

6 楼division(好风长吟)回复于 2006-05-05 17:52:49 得分 0

有哪位兄弟知道吗?Top

7 楼luck0235(风平浪静时人人都能掌舵)回复于 2006-05-05 18:39:07 得分 10

首先还得通过Session或Cookie判断,有登陆值,给下载,否则不给下载。  
   
  问题关键是在这个给下载上,如果你按普通方式给出文件地址,那样很难限制不登陆的用户也能下载。所以建议用Stream的方式向用户提供下载,如果用户登陆,调用该方法;否则不调用并给出提示,大至参考代码如下:  
  if(File.Exists(requestFile))  
  {  
  FileStream   fs   =   new   FileStream(requestFile,   FileMode.Open);  
  byte[]   bytes   =   new   byte[(int)fs.Length];  
  fs.Read(bytes,   0,   bytes.Length);  
  fs.Close();  
  Response.ContentType   =   "application/octet-stream";  
  Response.AddHeader("Content-Disposition","attachment;filename="+yourFileName)   ;  
  Response.BinaryWrite(bytes);  
  Response.Flush();  
  ......  
  Response.End();  
  }Top

8 楼division(好风长吟)回复于 2006-05-06 10:40:10 得分 0

谢谢楼上的我用这种方法结合HttpHandlers已经解决下载的问题,现在头疼的是,如果一个页面有十几二十几个文件下载,难道要为这些文件写十几二十几个点击事件么?Top

9 楼johnny1983()回复于 2006-05-06 10:50:08 得分 3

可以弄一个checkbox类似的控件,让用户自己选择进行批处理Top

10 楼liuyjcel(初定向)回复于 2006-05-06 11:09:24 得分 3

我也是个新手哈...  
  可能说的不怎么样..  
   
  可不可以,在数据库中加一个状态,当登录是状态为1,否则为0..  
  这样你在下载时去查看数据库中的状态...  
   
  不知道这样可不可以...Top

11 楼kingdhy(飞鹰)回复于 2006-05-06 11:41:21 得分 7

可以考虑Forms验证,不过在主机上要做DOC文件的映射,呵呵,如果自己有主机的话,这个问题不难,你可以参考一下关于Forms验证的资料!Top

12 楼syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2006-05-06 12:04:13 得分 7

如果一个页面有十几二十几个文件下载,难道要为这些文件写十几二十几个点击事件么?  
   
   
   
   
   
  封装代码,   复用.     所有事件连向同一个方法,方法内靠sender和e来处理.Top

13 楼insiderc()回复于 2006-05-06 12:56:40 得分 3

用权限控制是否链接地址Top

14 楼iloveictt(随缘)回复于 2006-05-06 12:58:26 得分 0

路过帮顶  
   
  广告  
   
  欢迎加入   QQ群大家相互学习,共同提高  
  名称:网站建设  
  群号:21637188Top

15 楼lianzy(蓝剑)回复于 2006-05-06 13:58:47 得分 1

http://community.csdn.net/Expert/topic/4690/4690727.xml?temp=.1483728Top

16 楼division(好风长吟)回复于 2006-05-06 18:36:19 得分 0

谢谢大家的意见。五天后结贴,都有分。Top

17 楼N_ccw(N神)回复于 2006-05-06 19:43:46 得分 2

Session+HttpHandlerTop

18 楼wizardxz(Mr. Deng)回复于 2006-05-06 19:49:09 得分 2

MARKTop

相关问题

关键词

得分解答快速导航

  • 帖主:division
  • jianyi0115
  • jaliwey
  • hxw001
  • luck0235
  • johnny1983
  • liuyjcel
  • kingdhy
  • syeerzy
  • insiderc
  • lianzy
  • N_ccw
  • wizardxz

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo