0

I have an ASP.NET website where I want to enter EmployeeName , and upload EmployeePhoto, then retrieve Employee Info and display Employeephoto on website.

I have created an SQL table with EmployeePhoto - type "image".

I use this code to insert photo on (it works fine) http://i.stack.imgur.com/qmphk.png

However when I want to load my inserted photo in SQL into website, I get this Inputstream does not exist error.

load photo codes & error http://i.stack.imgur.com/X2okW.png

I don't want to use the httphandler solution

EDIT: I have no correct answer yet :(

Thank you very much.

            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();
4

4 回答 4

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对象可能无法帮助您解决此解决方案,因为它与ImageWeb 控件不同。

详情见下文:

System.Drawing.Image

System.Web.UI.Controls.Image

于 2013-10-02T15:41:21.053 回答
1

按照 HTML 的设计方式,您应该使用某种处理程序,因为imgHTML 中的标签是指外部资源(例如src标签)。很长一段时间以来,没有办法将图像包含在从服务器返回的 HTML 中。

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

<img src="data:<MIMETYPE>;base64,<BASE64_ENCODED_IMAGE>">

不是所有的浏览器都支持这个,所以要小心。

此外,这种方法的一大缺点是图像不会被浏览器缓存,因此每次请求此页面时,服务器都会产生额外的开销来生成这个 Base64 值,而如果你有一个 URL,浏览器可以基于 URL 缓存图像,而不必在每次请求时从服务器获取它。

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

于 2013-10-02T16:01:07.563 回答
-1

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

试试这个:

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

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

于 2013-10-02T15:43:29.930 回答
-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);
            }
        }
于 2013-10-02T15:48:01.550 回答