//获取请求的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();
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. 文件可以作为BLOB上传到数据库中, 如果是保存在数据库中,直接读出来就行了.
2. 如果提示权限的问题,那你去设置一下不就可以了.
不知道我讲清楚没有.
但是这样太危险了。上面的办法应该也可以。直接读出二进制流然后在用户端生成文件,但是如何知道用户端的路径呢?能不能出现一个下载对话框,得到用户路径,然后往那里写文件即可。ahui_net(阿灰)的做法是这样的吗?