根据要求,要用.net 我用的是C#,做一个文件上下传的小系统,能上传文件,能下载文件。
遇到的问题是,下载需要权限,比如将权限给到页面上,或者怎样,不是每个文件每个用户都能下载。
但是我不知道如何实现,用户如果知道了文件的绝对地址,就绕开认证直接下下去了。
问题可能比较简单,希望知道的给个方向,谢谢!

解决方案 »

  1.   

    通过一个download.aspx页面传递下载文件的ID进行下载
    download.aspx页面负责权限控制
      

  2.   

                Response.ContentType = "application/octet-stream";
                Response.AddHeader("Content-Disposition", "attachment;filename=text.txt");
                Response.BinaryWrite(要下载的文件流)
                Response.END();
    这样就不用有人知道在址了,也没地址
      

  3.   

    以读取文件流的方式提供下载
    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();//结束文件下载  
        }
      

  4.   

    关键是不要把下载的文件直接放在iis目录下,就不能越过验证下载了