2013-04-28 41 views
2

我创建了一个网页,我使用Image控件来显示图像。随着这种控制我有一些标签和输入框也使用c保存和检索SQL Server数据库中的图像

下面是我已经习惯了将图像保存到数据库

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控制。

让我知道,如果我的检索从数据库中图像的方式是正确的,如果它的正确的,我应该使用什么类型的控制,所以网页

回答

0
上显示已经从数据库中检索到的图像

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

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

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

欲了解更多信息,请参见:http://blog.kurtschindler.net/post/using-httphandlers-to-serve-image-files

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。 你如何能做到这一点,你可以在这里戴尔拉根的回答,请参阅:How to bind a MemoryStream to asp:image control?

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,检索图像作为你已经做然后直接写入响应流。

+0

我可以知道这是什么DropDownList1.SelectedItem。的ToString();从这段代码我怎么会知道什么是存储图像的文件名 – 2013-04-28 13:42:51

+0

我试过这个solutuion,我发现图像存储在“C:\ Program Files文件(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE“在这条道路上。无论您硬编码的路径如何,静止图像都会存储在此路径中。我尝试使用此路径设置Image1.imageUrl,但仍未在网页上看到图像 – 2013-04-28 14:09:38

相关问题