这个是上传页面的主要代码HttpFileCollection files=HttpContext.Current.Request.Files;
for(int i=0;i<files.Count;i++)
{
HttpPostedFile postedFile = files[i];
int FileLength = postedFile.ContentLength;
Byte[] FileByteArray = new Byte[FileLength];
Stream StreamObject = postedFile.InputStream;
StreamObject.Read(FileByteArray, 0, FileLength);string sqlstr="Insert Into Files(NewsId,FileByte) VALUES('"+name+"','"+FileByteArray+"')";
}
这个是显示主要页面代码,由于不确定图片的个数,用的是动态生成的控件。Image autoimage = new Image();
autoimage.ImageUrl = "NewsList.aspx?NewId=" + Request.QueryString["ID"].ToString().Trim();
autoimage.Width=700;
autoimage.Height = 550;Panel P = new Panel();
P.Controls.Add(autoimage);
ShowFilePanel.Controls.Add(P);这个是图片输出页面 ShowPoto.aspx 的代码string StrId = (string)Request.QueryString["NewId"].ToString().Trim();            
DataSet Ds = Bsf.FileByte("select * from NewsFiles where NewId='" + StrId + "'", "TsgMainConStr");
if (Ds.Tables[0].Rows.Count > 0)
{                
                    Response.Clear();
                    DataRow Dr = Ds.Tables[0].Rows[0];
                    byte[] buffer = (byte[])Dr["FileByte"];
                    //Response.ContentType = Dr["FileType"].ToString();
                    Response.BinaryWrite(buffer);
                    Response.End();                
}调试运行没报错,就是显示不了图片,断点的时候ShowPoto.aspx 也获取到值了。大家帮看看,是哪儿错了?

解决方案 »

  1.   

    断点时发现问题,上传时FileByteArray的值是{byte[25457]},但是输出时buffer的值是{byte[13]}。为什么???我数据库的字段FileByte数据字段是image 长度16。
      

  2.   

    一:lz是否保存成功
    二:要想前台显示一定的要刷新前台界面
        当然也可以不刷新就的用js中的一个对象Image对象
    三:最好在前台的图片地址中加上参数,防止缓存如:../1.jpg?id=123465(随即)
      

  3.   

    //选择图片
            private void button7_Click(object sender, EventArgs e)
            {
                openFile.InitialDirectory = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
                openFile.Filter = "所有文件(*.*)|*.*";
                if (openFile.ShowDialog() == DialogResult.OK)
                {
                    T_path.Text = openFile.FileName;
                    pictureBox1.ImageLocation = openFile.FileName;
                }
            }
    //图片赋值 
                string myfilename = T_path.Text.Trim(); //OpenFileDialog1.FileName;
                FileStream fs = new FileStream(myfilename, FileMode.Open, FileAccess.Read);
                byte[] mybytes = new byte[fs.Length];
                fs.Read(mybytes, 0, Convert.ToInt32(fs.Length));
                member.Poto = Convert.ToBase64String(mybytes);
                fs.Close();
    //显示图片
                    pictureBox1.Refresh();
                    if (ds.Tables[0].Rows[0]["Poto"].ToString().Trim().Length > 0)
                    {
                        byte[] buffByte = Convert.FromBase64String(ds.Tables[0].Rows[0]["Poto"].ToString());
                        System.IO.MemoryStream ms = new System.IO.MemoryStream(buffByte);
                        pictureBox1.Image = Image.FromStream(ms);
                        T_path.Text = openFile.FileName.ToString();
                    }
      

  4.   

    断点时发现问题,上传时FileByteArray的值是{byte[25457]},但是输出时buffer的值是{byte[13]}。为什么???我数据库的字段FileByte数据字段是image 长度16。
      

  5.   

    你上传后,看看数据库里的字段是多大。用办法判断一下,如果没问题,那就是输出问题了,试试手动设置buffer的大小呢?
      

  6.   


    上传断点时FileByteArray的值是{byte[25457]},上传以后在数据库里我没找到办法查看字段内容...
      

  7.   

    试了很多次,终于发现如果写入数据库二进制的话必须使用 SqlParameter