asp.net 我从数据库中(不是文件夹)下载文件,下载后内容为System.Byte[],求帮助代码如下:
SqlCommand mySelect = new SqlCommand("select * FROM files where id = 1", sqlConn);
        SqlDataReader reader;
        reader = mySelect.ExecuteReader();
        if (reader.Read())
        {
            string sFileName = reader["FileName"].ToString();
            String length = reader["FileSize"].ToString();
            Response.Clear();
            Response.ClearContent();
            Response.ClearHeaders();
           
            Response.ContentEncoding = Encoding.Default;
            Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(sFileName, System.Text.Encoding.UTF8).Replace("+", ""));
            Response.AppendHeader("Content-Length", length);  
            Response.ContentType = "application/octet-stream";
            
            byte[] bt = (Byte[])reader["FileData"];
            Response.OutputStream.Write(bt, 0, bt.Length);
            Response.Flush();
            
            Response.OutputStream.Close();
            Response.End();
        }

解决方案 »

  1.   

    byte[] bt = (Byte[])reader["FileData"];
    ---------------------
    应该就是这个转换出错了。
      

  2.   

    换个方式吧 private void FN_ResponseFile()
            {
                System.IO.Stream iStream = null;
                byte[] buffer = new Byte[10000];
                int length;
                long dataToRead;
                //获取资源的编号
                string id = Request["id"].ToString();
                NRBLL.File bf = new Asiastar.NRBLL.File();
                Guid guid = new Guid(id);
                //获取资源完整路径
                if (bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"] != null)
                {
    //filepath 存的是完整路径 
                    string filepath = bf.FN_SerchPathByFileId(guid).Tables[0].Rows[0]["FilePath"].ToString();
                    string filename = System.IO.Path.GetFileName(filepath);                try
                    {
                        string fileName = HttpUtility.UrlEncode(System.Text.Encoding.UTF8.GetBytes(filename));
                        filename = filename.Replace("+", "%20");  //将“+”替换成“空格”
                        iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
                        dataToRead = iStream.Length;
                        Response.ContentType = "application/octet-stream";
                        Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
                        while (dataToRead > 0)
                        {
                            if (Response.IsClientConnected)
                            {
                                length = iStream.Read(buffer, 0, 10000);
                                Response.OutputStream.Write(buffer, 0, length); Response.Flush();
                                buffer = new Byte[10000];
                                dataToRead = dataToRead - length;
                            }
                            else
                            {
                                dataToRead = -1;
                            }
                        }
                    }
                    catch (Exception)
                    {
                        Response.Write("文件下载时出现错误!");
                    }
                    finally
                    {
                        if (iStream != null)
                        {
                            iStream.Close();
                        }
                    }
                }
                else
                {
                    Page.RegisterStartupScript("提示", "<script type='javascript'>alert('文件不存在!')</script>");
                }
            }
      

  3.   

    #region 文件下载
           public bool DownLoadFile(string localPath, string hostURL, int byteCount, string userID, long cruuent)
           {
               
               bool result = true;
               
               
               string tmpURL = hostURL;
              
               byteCount = byteCount * 1024;
               hostURL = tmpURL + "&npos=" + cruuent.ToString();
               
               System.IO.FileStream fs;  
               fs = new FileStream(localPath, FileMode.OpenOrCreate);
               if (cruuent > 0)
               {
                   //偏移指针
                   fs.Seek(cruuent, System.IO.SeekOrigin.Current); 
               }
               System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(hostURL);
               if (cruuent > 0)
               {
                   request.AddRange(Convert.ToInt32(cruuent));    //设置Range值
               }           try
               {
                   //向服务器请求,获得服务器回应数据流
                   System.IO.Stream ns = request.GetResponse().GetResponseStream();               byte[] nbytes = new byte[byteCount];
                   int nReadSize = 0;
                   nReadSize = ns.Read(nbytes, 0, byteCount);
                  
                   while (nReadSize > 0)
                   {
                       fs.Write(nbytes, 0, nReadSize);
                       nReadSize = ns.Read(nbytes, 0, byteCount);
                      
                   }
                   fs.Close();
                   ns.Close();
               }
               catch(Exception ex)
               {
                   LOG.Error("下载" + localPath + "的时候失败!" + "原因是:" + ex.Message);
                   fs.Close();
                   result = false;
               }
               return result;     
           }
           #endregion