新手提问:如何实现登陆后才能下载特定文件?
开发环境: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




