2

我创建了一个网页,我在其中使用Image控件来显示图像。除了这个控件,我还有一些标签和输入框

下面是我用来将图像保存到数据库的代码

byte[] imageSize = new byte[FileUpload1.PostedFile.ContentLength];
HttpPostedFile uploadedImage = FileUpload1.PostedFile;
uploadedImage.InputStream.Read(imageSize, 0, (int)FileUpload1.PostedFile.ContentLength);

SqlParameter UploadedImage = new SqlParameter("@image", SqlDbType.Image, imageSize.Length);
UploadedImage.Value = imageSize;

string sql = "insert into imageDB(Image) values (@image)";

using (SqlCommand cmd = new SqlCommand(sql, conn))
{
   cmd.Parameters.Add(UploadedImage);
   cmd.ExecuteNonQuery();
}

下面是我用来从数据库中检索图像的代码

byte[] rawImg = (byte[])rdr["image"];
MemoryStream Stream = new MemoryStream();
Stream.Write(rawImg, 0, rawImg.Length);
Bitmap Display_Picture = new Bitmap(Stream);
//after this no idea how to proceed

我看过一些链接,都提示我们不能设置这个字节信息来Image控制。

让我知道我从数据库中检索图像的方式是否正确,如果正确,我应该使用什么类型的控件,以便从数据库中检索到的图像可以显示在网页上

4

3 回答 3

1

我从数据库中检索图像的方式对吗?

我会改用以下代码(抱歉未测试):

byte[] imageBytes = Convert.FromBase64String(rdr["image"]);
MemoryStream stream = new MemoryStream(imageBytes);
Image image = Image.FromStream(stream);

如何将图像绑定到 asp.net 图像控件?

我将创建一个获取并返回图像的 HttpHandler。然后将asp:Image上的ImageUrl属性绑定到HttpHandler的url。如何做到这一点,您可以在 Dale Ragan 的回答中看到:如何将 MemoryStream 绑定到 asp:image 控件?

于 2013-04-28T10:04:17.447 回答
0

要检索图像,并在 asp.net 图像控件上显示,您可以

    cn.Open();
    SqlCommand cm = new SqlCommand("select * from ImageCollection where img_id='" + DropDownList1.SelectedItem.ToString() + "'", cn);
    SqlDataAdapter da = new SqlDataAdapter(cm);
    SqlDataReader dr = cm.ExecuteReader();
    try
    {
        if (dr.Read())
        {

            string image1 = Convert.ToString(DateTime.Now.ToFileTime());
            FileStream fs1 = new FileStream(image1, FileMode.CreateNew, FileAccess.Write);
            byte[] bimage1 = (byte[])dr["passport_photo"];
            fs1.Write(bimage1, 0, bimage1.Length - 1);
            fs1.Flush();
            Image1.ImageUrl = "~/images/"+DropDownList1.SelectedItem.ToString();
        }
        dr.Close();
        cn.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }

替代解决方案:

实现一个处理程序来提供图像。看看System.Web.IHttpHandler接口。

我们的想法是在您的页面中编写一个图像标签,如下所示:

<asp:image runat="server" imageurl="~/Image.ashx?ID=xxx" />

然后在您的处理程序实现中,从查询字符串中获取 id,按照您已经在做的方式检索图像,然后直接写入响应流。

于 2013-04-28T10:22:55.590 回答
0

首先,在您的示例中,您必须将流中的位置重置为 0:Stream.Position = 0;

其次,您必须将图像写入 Web 服务的本地缓存文件夹,该文件夹是 Web 应用程序的一部分。您的图像控件可以具有指向该图像地址的源引用 (img.src)。

或者...您可以创建一个 AXD 文件/HttpHandler。AXD 文件是一个文件,就像 ASPX 一样,但专门用于返回任何类型的数据,如图像。

有关详细信息,请参阅:http ://blog.kurtschindler.net/post/using-httphandlers-to-serve-image-files

于 2013-04-28T09:59:33.877 回答