我有一个ASP.NET网站,我想输入EmployeeName,上传EmployeePhoto,然后检索员工信息并在网站上显示Employeephoto。
我用EmployeePhoto创建了一个SQL表 - 输入“image”。
我使用此代码插入照片(工作正常) 的 http://i.stack.imgur.com/qmphk.png
但是,当我想将我在SQL中插入的照片加载到网站时,我得到的这个Inputstream不存在错误。
加载照片代码&错误 http://i.stack.imgur.com/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();
答案 0 :(得分:2)
替换
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
网络控件不同。
详见下文:
答案 1 :(得分:1)
使用HTML的设计方式,您应该使用某种处理程序,因为HTML中的img
标记指的是外部资源(例如src
标记)。在最长的时间内,没有办法将图像包含在从服务器返回的HTML中。
话虽这么说,情况发生了变化,现在有可能。您可以使用特殊格式的src
属性对图像进行base-64编码并将其包含在标记中:
<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>">
并非所有浏览器都支持此功能,因此请小心。
此外,这种方法的一个重大缺点是浏览器没有缓存图像,因此每次请求此页面时,服务器都会产生额外的开销来产生这个Base64值,而如果你有一个URL ,浏览器可以根据URL缓存图像,而不必在每次请求时从服务器获取它。
要获取Base64字符串,请使用静态方法System.Convert.ToBase64String(byte[])
。
答案 2 :(得分:-1)
那是因为没有名为InputStream的对象。
请改为尝试:
byte[] imagedata = (byte[])dr[2];
Image Image1 = Image.FromStream(new MemoryStream(imagedata));
这会将byte[]
放入内存流,然后允许您使用Image.FromStream();
答案 3 :(得分:-1)
我相信这可行:
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);
}
}