图片已经放进数据库里了,字段名称是是image,类型是image
上传 图片使用了fileupload控件,上传成功之后,我想读出来
protected void 上传按钮_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            string filename = FileUpload1.PostedFile.FileName;
            string fileextension = FileUpload1.PostedFile.ContentType;
            if(fileextension=="image/jpeg"|| fileextension=="image/bmp")
            {
                SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constr"].ToString());
                Stream imgs=FileUpload1.PostedFile.InputStream;
                int imglen = FileUpload1.PostedFile.ContentLength;
                byte[] imgdata=new byte[imglen];
                int i = imgs.Read(imgdata,0,imglen);
                string sqlstr = "insert into gg (imgtype,image) values (@imagetype,@image)";
                con.Open();
                SqlCommand com = new SqlCommand(sqlstr,con);
                com.Parameters.Add(new SqlParameter("@imagetype", SqlDbType.VarChar, 1000));
                com.Parameters.Add(new SqlParameter("@image", SqlDbType.Image, 16));
                com.Parameters["@imagetype"].Value = fileextension;
                com.Parameters["@image"].Value = imgdata;
                if ((int)com.ExecuteNonQuery() > 0)
                {
                    Response.Write("<script language=javascript>alert('上传成功')</script>");
                   
                }
                else
                {
                    
                }
                con.Close();
            }
            else
            {
            }
        }上传成功之后,我想读出来,新建一个页面show.aspx用来读取using System;
using System.IO;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration; 
public partial class show : System.Web.UI.Page
{
    
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            if (Request.Params["id"] != null)
            {
                this.hly(Request.Params["id"].ToString().Trim());
            }
        }
    }    private void hly(string id)
    {
           
            string sql = " select * from gg WHERE image is not null and id='" + id + "'";
            SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constr"].ToString());
            con.Open();
            SqlCommand cmd = new SqlCommand(sql,con);
            cmd.CommandText = sql;
            //SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr != null)
            {
                while (dr.Read())
                {
                    //Response.ContentType = "image/jpeg";
                   //Response.ContentType = "application/x-msdownload   ;   Charset=utf-8";   
                    //Response.ContentType = "application/octet-stream"; 
                    Response.ContentType = "image/jpg";
                    Response.BinaryWrite((byte[])dr["image"]);//直接写二进制流到页面
                    Response.End();
                }
            }
        
    }
   }可是读出来的都是乱码,请问,哪个地方出问题?高手帮帮忙,不胜感激!

解决方案 »

  1.   

    你先把数据区出来,看看能加载到一个Image对象中去
      

  2.   

    Stream imgs=FileUpload1.PostedFile.InputStream; 
    int imglen = FileUpload1.PostedFile.ContentLength;  byte[] imgdata=new byte[imglen]; 
    int i = imgs.Read(imgdata,0,imglen); 
      

  3.   

    int i = imgs.Read(imgdata,0,imglen);  
    还有你这句有问题,应该返还一个数据流作为com.Parameters["@image"].Value = imgdata; 
    赋值参数,你这明显的不对。
      

  4.   


     private void hly(string id) 
        { 
                
                string sql = " select * from gg WHERE image is not null and id='" + id + "'"; 
                SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["constr"].ToString()); 
                con.Open(); 
                SqlCommand cmd = new SqlCommand(sql,con); 
                cmd.CommandText = sql; 
                //SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
                SqlDataReader dr = cmd.ExecuteReader(); 
                if (dr != null) 
                { 
                    while (dr.Read()) 
                    { 
                        Response.Clear();
                        Response.ContentType = "image/jpg"; 
                        byte[] buffer=(byte)dr["Image"];
                        System.IO.MemoryStream ms=new System.IO.MemoryStream(buffer);
                        System.Drawing.Image image=System.Drawing.Image.FromStream(ms);
                        ms.WriteTo(Response.OutputStream);
                        Response.End(); 
                    } 
                } 
             
      

  5.   

    14楼的大哥,还是不行。
    System.Drawing.Image image=System.Drawing.Image.FromStream(ms);出异常了。
      

  6.   

    byte[] imgdata=new byte[imglen]; 
    stream  imgreader=new memorystream(imgdata) ;
    imgreader.Read(imagedata, 0, imglen);.
    .
    .com.Parameters["@image"].Value = imgreader;