从数据库中检索图像并在没有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); } }