从数据库中检索图像并显示在网页上

时间:2015-07-19 19:20:11

标签: c# asp.net sql-server winforms

我使用以下代码将面板保存为数据库中的图像:

public Form2()
{
    InitializeComponent();
}

public static byte[] ImageToByte2(Bitmap img)
{
    byte[] byteArray = new byte[0];

    using (MemoryStream stream = new MemoryStream())
    {
        img.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
        stream.Close();

        byteArray = stream.ToArray();
    }

    return byteArray;
}

private void button1_Click(object sender, EventArgs e)
{
    Form1 fom = new Form1();

    Bitmap bitmap = new Bitmap(fom.panel1.ClientSize.Width,
                          fom.panel1.ClientSize.Height);

    fom.panel1.DrawToBitmap(bitmap, fom.panel1.ClientRectangle);

    byte[] imgArray = ImageToByte2(bitmap);

    ImageData img = new ImageData
    {
        ClassName = textBox1.Text,
        Password = textBox2.Text,
        Image = imgArray,
    };

    using (BoardDatabaseEntities dc = new BoardDatabaseEntities())
    {
        dc.ImageDatas.Add(img);
        dc.SaveChanges();
        MessageBox.Show("Saved into database");      
    }

    this.Close();
}

我正在尝试在网页上显示来自数据库的图像(视图控件),但还没有成功。互联网上有许多源代码,但它们都上传了一个文件。代码适用于UploadedFile。我无法弄清楚如何使它(那些代码)适合我的情况。你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

一般的做法是你有某种处理程序从数据库中检索图像并将它们提供给客户端。为了知道要检索的图像,您需要主键。为了提供正确的MIME类型,您需要从数据库中提取该数据。

将通用处理程序(.ashx)添加到项目中。

public class Handler : IHttpHandler
{

    public void ProcessRequest (HttpContext context)
    {

        string ImageId = context.Request.QueryString["Id"]; //you'll want to do defensive coding and make sure this query string variable exists



        byte[] ImageBytes = Database.GetImageBytes(ImageId); //I assume you know how to retrieve the byte array from the database?
        string MimeType = Database.GetMimeType(ImageId);

        context.Response.ContentType = MimeType;
        context.Response.BinaryWrite(ImageBytes);
    }

    public bool IsReusable { get { return false; } }
}

然后在页面上,您只需将URL放到图像源的处理程序中。

<asp:Image runat="server" ImageUrl="~/RetrieveImage.ashx?Id=505874" />

答案 1 :(得分:0)

一种解决方案是将字节数组转换为base64编码的字符串,然后将其发送到视图。

Converting image into data:image/png;base64 for web page disaplay