从数据库中检索图像并在没有httphandler的情况下显示在ASP.NET上

我有一个ASP.NET网站,我想输入EmployeeName,上传EmployeePhoto,然后检索员工信息并在网站上显示Employeephoto。

我用EmployeePhoto创建了一个SQL表 – 输入“image”。

我使用此代码插入照片(工作正常) http://sofzh.miximages.com/c%23/qmphk.png

但是,当我想将我在SQL中插入的照片加载到网站时,我得到的这个Inputstream不存在错误。

加载照片代码和错误http://sofzh.miximages.com/c%23/X2okW.png

我不想使用httphandler解决方案

编辑:我还没有正确答案:(

非常感谢你。

cnn.Open(); SqlCommand cmd = new SqlCommand("SELECT EmployeeFirstName,EmployeeLastName,EmployeePhoto FROM Employees WHERE EmployeeID = @myvalue", cnn); cmd.Parameters.AddWithValue("@myvalue", (ListBox1.SelectedValue)); SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { while (dr.Read()) { TextBox1.Text = dr.GetString(0); TextBox2.Text = dr.GetString(1); byte[] imagedata = (byte[])dr[2]; InputStream.Read(imagedata, 0, (byte[])dr[2]); Image Image1 = Image.FromStream(imagedata); } } cnn.Close(); 

更换

  byte[] imagedata = (byte[])dr[2]; InputStream.Read(imagedata, 0, (byte[])dr[2]); Image Image1 = Image.FromStream(imagedata); 

  byte[] imagedata = (byte[])dr[2]; Image Image1 = Image.FromStream(new MemoryStream(imagedata)); 

看起来错误正在发生,因为它找不到您正在使用的InputStream对象。 通过创建一个新的MemoryStream对象来绕过它。

你也将二进制数组传递给Image.FromStream ,我认为不会被正确接受。

同样使用Image对象可能无法帮助您使用此解决方案,因为它与Image Web控件不同。

详见下文:

为System.Drawing.Image

System.Web.UI.Controls.Image

通过HTML的设计方式,您应该使用某种处理程序,因为HTML中的img标记指的是外部资源(例如src标记)。 在最长的时间内,没有办法将图像包含在从服务器返回的HTML中。

话虽如此,事情已经发生了变化,现在有可能。 您可以使用特殊格式的src属性对图像进行base-64编码并将其包含在标记本身中:

  

并非所有浏览器都支持此function,因此请小心。

此外,这种方法的一个重大缺点是浏览器不缓存图像,因此每次请求此页面时,服务器将产生额外的开销以产生此Base64值,而如果您有URL,则浏览器可以根据URL缓存图像,而不必在每次请求时从服务器获取它。

要获取Base64字符串,请使用静态方法System.Convert.ToBase64String(byte[])

那是因为没有名为InputStream的对象。

试试这个:

 byte[] imagedata = (byte[])dr[2]; Image Image1 = Image.FromStream(new MemoryStream(imagedata)); 

这会将byte[]放入内存流中,然后允许您使用Image.FromStream();

我相信这可行:

 byte[] bitMapData = dr[2] as byte[] ?? null; if (bitMapData != null) { using (MemoryStream stream = new MemoryStream(bitMapData)) { System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream); } }