我做的是附件的上传与下载,上传的时候,把附件名和内容存入sql2005的一张表里,(其中内容里显示的是<二进制数据>)。下载的时候,读取内容,把数据以流的形式输出,然后写,然后发送到客户端。源代码如下:
其中下载下来以后,文件里显示的内容就13个字节“system.byte[]” 我想应该是数据转化的时候,有问题,但是具体在哪,请各位高手指点,小弟菜鸟~~,不胜感激!!!。        string filename = drpfile.SelectedItem.Text.Trim();    //要下载的文件名
        string command = @"select FileContent from Accessories where  FileName = '" + filename + "' //检索文件内容,(二进制)
        DataTable ds = new Farshine.GuoBan.DataAccess.SqlDirectDataAccess().GetDataTable(command);
        byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流
        int ArraySize = bytes.GetUpperBound(0);           //取最大维数
        FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read);
        fs.Read (bytes, 0, ArraySize);
        fs.Close();
        Response.ContentType = "application/octet-stream";  
        Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); //fileName为需要下载的文件名
        Response.Write(bytes);  // 写入输入流
        Response.Flush();  // 向客户端发送数据流
        Response.End();

解决方案 »

  1.   

    Response.BinaryWrite(bytes);  // 写入输入流 
      

  2.   

    int ArraySize = bytes.GetUpperBound(0);          //取最大维数 
            FileStream fs = new FileStream(filename, FileMode.OpenOrCreate, FileAccess.Read); 
            fs.Read (bytes, 0, ArraySize); 
            fs.Close(); 
    这几句干什么的?去掉吧
    byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流 
    这里不是已经有值了吗?
      

  3.   

    byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流 
    那就是ds.Rows[0]["FileContent"]里的数据有问题了,肯定是存的时候没有存进去
                string filename ="macfeeinfo.txt";    //要下载的文件名 
                FileStream fs = new FileStream("d:\\macfeeinfo.txt", FileMode.OpenOrCreate, FileAccess.Read); 
                int ArraySize = (int)fs.Length ;
                byte[] bytes = new byte[ArraySize];
                fs.Read (bytes, 0, ArraySize); 
                fs.Close(); 
                Response.ContentType = "application/octet-stream";  
                Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); //fileName为需要下载的文件名 
                Response.Write(bytes);  // 写入输入流 
                Response.Flush();  // 向客户端发送数据流 
                Response.End();
    这是从一个文件里读数据到byte数组然后下载的代码
      

  4.   

    byte[] bytes = (byte[])ds.Rows[0]["FileContent"];//读取二进制流 换一种方式吧 
    byte[] bytes = encoding.default.getbytes(ds.Rows[0]["FileContent"].tostring());然后在这里打断点,看看byte得到的是什么
      

  5.   

    这是我上传的语句,看看有没有错误 affairs = new SQLDALTableAdapters.AccessoriesTableAdapter();        int filecount = 1;
            System.Web.UI.HtmlControls.HtmlInputFile nyFile = (System.Web.UI.HtmlControls.HtmlInputFile)upFiles;
            string fileName;
            for (int fileCount = 0; fileCount < filecount; fileCount++)
            {
                //得到提交的文件            Stream fileDataStream = nyFile.PostedFile.InputStream;            //构造数组            byte[] fileData = new byte[nyFile.PostedFile.ContentLength];            //把文件流填充到数组            fileDataStream.Read(fileData, 0, nyFile.PostedFile.ContentLength);            //取得上传得文件名
                fileName = System.IO.Path.GetFileName(nyFile.PostedFile.FileName);            if (fileName != String.Empty)
                {
                    ////取得文件的扩展名
                    //fileExtension = System.IO.Path.GetExtension(fileName);                //上传附件
                    //affairs.Insert(0, fileName, fileData, fileExtension, 0, CurrentUserInfo.所属单位ID.ToString(), null, txtFileRe.Text.Trim(), Session.SessionID, 0);
                    SQLDAL.AccessoriesDataTable tab = new SQLDAL.AccessoriesDataTable();
                    SQLDAL.AccessoriesRow accessoriesRow = tab.NewAccessoriesRow();
                    accessoriesRow.ArtNo = 0;
                    accessoriesRow.FileName = fileName;
                    accessoriesRow.FileContent = fileData;
                    accessoriesRow.OrgNo = CurrentUserInfo.所属单位ID.ToString();
                    accessoriesRow.Re = txtFileRe.Text.Trim();
                    accessoriesRow.SessionID = this.CurrentUserInfo.所属单位ID.ToString();// Session.SessionID.Trim();
                    DALService.insertAccessories(accessoriesRow);
                }            this.showUpAccessories();
            }
            this.txtFileRe.Text = "";