Преобразование из двоичных данных в элемент управления изображением в ASP.NET - PullRequest
13 голосов
/ 12 сентября 2011

У меня есть двоичные данные изображения в моей базе данных, и я хочу отобразить их в элементе управления изображениями в ASP.NET. Как? Если это невозможно, найдите другой способ сохранить его в базе данных и отобразить в элементе управления изображением.

Ответы [ 6 ]

32 голосов
/ 12 сентября 2011

Создайте обычный элемент HTML img, например:

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

И в коде сделайте это:

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

Где imageBytes - это byte[].

Вы сделали. Изображение будет отображено.

5 голосов
/ 12 сентября 2011

Скорее всего, изображение хранится в виде байтового массива в базе данных. Если это так, то вы можете использовать это:

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;
}
1 голос
/ 22 января 2012
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";           
}

Используйте это событие для нажатия кнопки, чтобы получить изображение и вызвать метод Ret_Image здесь.

1 голос
/ 22 января 2012
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;
}
1 голос
/ 12 сентября 2011

В универсальном обработчике (.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 голосов
/ 08 июля 2012
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;
}
...