根据要求,要用.net 我用的是C#,做一个文件上下传的小系统,能上传文件,能下载文件。
遇到的问题是,下载需要权限,比如将权限给到页面上,或者怎样,不是每个文件每个用户都能下载。
但是我不知道如何实现,用户如果知道了文件的绝对地址,就绕开认证直接下下去了。
问题可能比较简单,希望知道的给个方向,谢谢!
遇到的问题是,下载需要权限,比如将权限给到页面上,或者怎样,不是每个文件每个用户都能下载。
但是我不知道如何实现,用户如果知道了文件的绝对地址,就绕开认证直接下下去了。
问题可能比较简单,希望知道的给个方向,谢谢!
解决方案 »
- ASP.NET Membership数据库放在那里?
- 在下载数据的开始,有些网站是要登录了才能看到相应的数据
- 如何过滤非法用户(详细解答)
- 用ext.form和ext.grid的思路实现查询?
- 用.net简历论坛、博客、相册功能的解决方案
- 另有20分等你拿.我该怎样应用接口呢??????昨天的问题呀!!!!!!!!!
- 关于IHttpHandler求助
- 关于"字符的chr函数值
- 简单问题:关于web.config
- 求asp.net mvc控制到按钮级别的系统的实例或者源代码
- 有关TreeView设置滚动条的问题
- .net textbox有没有 将输入的字符转成大写的属性 例如delphi里面的CharCase属性
download.aspx页面负责权限控制
Response.AddHeader("Content-Disposition", "attachment;filename=text.txt");
Response.BinaryWrite(要下载的文件流)
Response.END();
这样就不用有人知道在址了,也没地址
private void Download(string FileName)
{ System.IO.FileStream r = new System.IO.FileStream(FileName, System.IO.FileMode.Open);
//设置基本信息
System.Web.HttpContext.Current.Response.Buffer = false;
System.Web.HttpContext.Current.Response.AddHeader("Connection", "Keep-Alive");
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.IO.Path.GetFileName(FileName));
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", r.Length.ToString());
while (true)
{
//开辟缓冲区空间
byte[] buffer = new byte[1024];
//读取文件的数据
int leng = r.Read(buffer, 0, 1024);
if (leng == 0)//到文件尾,结束
break;
if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
System.Web.HttpContext.Current.Response.BinaryWrite(buffer);
else
{
//读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
byte[] b = new byte[leng];
for (int i = 0; i < leng; i++)
b[i] = buffer[i];
System.Web.HttpContext.Current.Response.BinaryWrite(b);
}
}
r.Close();//关闭下载文件
System.IO.File.Delete(FileName);
System.Web.HttpContext.Current.Response.End();//结束文件下载
}