Convert from binary data to an image control in ASP.NET

前端 未结 6 987
傲寒
傲寒 2020-11-27 06:44

I have binary data of an image in my database, and I want to display it in an image control in ASP.NET. How? If it is impossible, please find another way to save it in the d

相关标签:
6条回答
  • 2020-11-27 07:04

    Most likely the image is being stored as a byte array in the database. If so, then you can use this:

    public static System.Drawing.Image ByteArrayToImage(byte[] bArray)
    {
        if (bArray == null)
            return null;
    
        System.Drawing.Image newImage;
    
        try
        {
            using (MemoryStream ms = new MemoryStream(bArray, 0, bArray.Length))
            {
                ms.Write(bArray, 0, bArray.Length);
                newImage = System.Drawing.Image.FromStream(ms, true);
            }
        }
        catch (Exception ex)
        {
            newImage = null;
    
            //Log an error here
        }
    
        return newImage;
    }
    
    0 讨论(0)
  • 2020-11-27 07:09
    public Byte[] Ret_image(Int32 id)
    {
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "select * from tbimage where imageid=@id";
        cmd.Connection = con;
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = id;
        SqlDataReader dr = cmd.ExecuteReader();
        dr.Read();
        Byte[] ar = (Byte[])(dr[1]);
        dr.Close();
        cmd.Dispose();
        return ar;
    }
    
    0 讨论(0)
  • 2020-11-27 07:09
    SqlConnection con = new SqlConnection();
    string _path;
    Using SYstem.IO;
    Using System.Data.SQLClient;
    
    //convert Image to binary and save in DB
    
    private void button1_Click(object sender, EventArgs e)
    {
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            _path = openFileDialog1.FileName;
            InsertInSQL(_path);
        }
    }
    
    private void InsertInSQL(string _path)
    {
        con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
        string strQ = "insert into dbo.PicTBL(Pic)values(@p)";
        SqlCommand command = new SqlCommand(strQ,con);
        command.Parameters.AddWithValue("@p",ImageToBinary(_path));
        con.Open();
        command.ExecuteNonQuery();
        con.Close();
    }      
    
    public static byte[] ImageToBinary(string _path)
    {
        FileStream fS = new FileStream(_path, FileMode.Open, FileAccess.Read);
        byte[] b = new byte[fS.Length];
        fS.Read(b, 0, (int)fS.Length);
        fS.Close();
        return b;
    }
    
    //Convert Binary to imge and save in a folder
    private void button1_Click_1(object sender, EventArgs e)
    {
        DataTable dt = Rimage();
        foreach (DataRow row in dt.Rows)
        {
            byte[] b = (byte[])row["Pic"];
            Image img = BinaryToImage(b);
            img.Save("D:\\NewFolder\\" + row["ID"].ToString() + ".jpg");
        }
    }
    
    private Image BinaryToImage(byte[] b)
    {
        if (b == null) 
            return null;
    
        MemoryStream memStream = new MemoryStream();
        memStream.Write(b, 0, b.Length);
    
        return Image.FromStream(memStream);
    }
    
    private DataTable Rimage()
    {
        con.ConnectionString = Pic.Properties.Settings.Default.ConnectionS;
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = "select * from dbo.PicTBL";
        cmd.Connection = con;
        SqlDataAdapter adp = new SqlDataAdapter(cmd);
        DataTable dt = new DataTable();
        con.Open();
        adp.Fill(dt);
    
        return dt;
    }
    
    0 讨论(0)
  • 2020-11-27 07:10

    In a generic handler (.ashx):

      public class ImageHandler : IHttpHandler
            {
    
                public void ProcessRequest(HttpContext context)
                {
    
                        if(!string.IsNullOrEmpty(context.Request.QueryString["ImageId"])){
                        try
                        {
                            string ImageId = context.Request.QueryString["ImageId"].ToString(); 
                            ImageDataModel idm = new ImageDataModel();
                            byte[] ImageData = idm.getImageData(ImageId);
    
                            context.Response.ContentType = "image/JPEG";
                            context.Response.OutputStream.Write(ImageData, 0, ImageData.Length); 
    
    
                        }
    
    0 讨论(0)
  • 2020-11-27 07:10
    protected void Button2_Click(object sender, EventArgs e)
    {
        Byte[] ar = Ret_image(Convert.ToInt32(TextBox2.Text));
        String st = Server.MapPath("abc.jpg");
        FileStream fs = new FileStream(st, FileMode.Create, FileAccess.Write);
        fs.Write(ar, 0, ar.Length);
        fs.Close();
        Image1.ImageUrl = "abc.jpg";           
    }
    

    Use this event for the button click to retrieve image and call the Ret_Image method here.

    0 讨论(0)
  • 2020-11-27 07:15

    Create a regular HTML img element like so:

    <img runat="server" id="image" />
    

    And in code behind do this:

    image.src = "data:image/png;base64," + Convert.ToBase64String(imageBytes);
    

    Where imageBytes is a byte[].

    You are done. The image will be displayed.

    0 讨论(0)
提交回复
热议问题