//获取请求的id
string strFileId = Request.QueryString["Fileid"].ToString().Trim(); // 连接数据库
CompassOA.Public.LinkSQL ThisLinkSQL = new CompassOA.Public.LinkSQL();
SqlConnection _conn = ThisLinkSQL.Get_Conn(); //查询的SQL
string SQL = "SELECT fileName, fileSize, fileType, pData FROM _Doc_File WHERE fileId ="+ strFileId; SqlCommand _Comm = new SqlCommand(SQL, _conn);
_conn.Open(); SqlDataReader sdrFile = _Comm.ExecuteReader();
sdrFile.Read();
Byte[] byAFiles = (byte[])sdrFile["pData"];
Response.ContentType = "Application/octet-stream"; string FileName = System.Web.HttpUtility.UrlEncode(sdrFile["fileName"].ToString());
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename="+ FileName);
Stream streamFile = this.Response.OutputStream;
streamFile.Write(byAFiles, 0, Convert.ToInt32(sdrFile["fileSize"]));
streamFile.Close(); sdrFile.Close();
Response.Flush();
Response.End(); _conn.Close();

解决方案 »

  1.   

    这里面有两个问题:
    1. 文件可以作为BLOB上传到数据库中, 如果是保存在数据库中,直接读出来就行了.
    2. 如果提示权限的问题,那你去设置一下不就可以了.
    不知道我讲清楚没有.
      

  2.   

    最简单的解决办法就是在服务器上设置一个目录,然后给everyone提供write的权限。
    但是这样太危险了。上面的办法应该也可以。直接读出二进制流然后在用户端生成文件,但是如何知道用户端的路径呢?能不能出现一个下载对话框,得到用户路径,然后往那里写文件即可。ahui_net(阿灰)的做法是这样的吗?
      

  3.   

    就是服务器上面的虚拟目录的权限文件问题!!更改对应目录的权限就OK了可以增加Everyone也可以增加ISUR_你的服务器的机器名,但相对来讲后者的安全性好一点点。。