我无法在我的页面上写图像,而是在页面上看到特殊字符

时间:2010-12-10 07:37:49

标签: asp.net

SqlConnection conn = new SqlConnection();
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter();
            byte[] arrContent ;
            DataRow dr;
            string strSql;
            strSql = "Select Image from productItems where productid = 18";
            da = new SqlDataAdapter(strSql, connectionString);
            da.Fill(ds);
            dr = ds.Tables[0].Rows[0];
            arrContent = (byte[])dr["Image"];
            Response.OutputStream.Write(arrContent,0,6306);
            Response.End(); 

我无法在我的页面上写入实际上是图像的字节数据。 我看到的是一系列特殊人物。我做错了什么?

5 个答案:

答案 0 :(得分:3)

我怀疑你是在尝试将图像直接写入不属于它的HTML中。您的页面应该有一个img元素,该元素使用一个URL返回您的服务器,该URL可以让您在该请求进入时获取ID ...当您提供实际图像时 数据以及适当的内容类型。

当然,我可能在这里偏离基地......你没有向我们提供任何背景信息(比如此请求还提供了其他服务......)。

其他要点:

  • 您应该在using上使用SqlConnection语句,以便在发生任何事情时关闭
  • 我认为使用DataSetSqlDataAdapter毫无意义。为什么不调用ExecuteReader然后使用GetBytes来获取数据?
  • 无论实际有多少数据,您总是在响应中写入6306个字节。为什么?

答案 1 :(得分:1)

您需要将字节数组转换为有效图像,然后在网页中显示该图像。

C#: How to convert BITMAP byte array to JPEG format?

答案 2 :(得分:1)

根据MSDN“如果未指定ContentType,则默认为text / HTML。”。这意味着当您发送图像字节时,浏览器会将其视为普通网页,并尝试将其显示为显示HTML内容。

要避免此行为,您必须将内容类型显式设置为指定图像的MIME类型之一。

例如,对于PNG图像,您可以使用:

this.Response.ContentType = "image/png";

发送实际内容之前。

答案 3 :(得分:1)

您需要将您拥有的内容转换为字符串并进行渲染。

Response.ContentType = dRow["Image"].ToString();
byte[] imageContent = (byte[])((dRow["img_stream"]));

Response.BinaryWrite(imageContent); 

答案 4 :(得分:0)

您可以采用的另一种方法是使用内嵌图像(尽管并非所有浏览器都支持它)。简单的例子:

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/ /ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16" height="14" alt="embedded folder icon">

这甚至可以优化您的网站加载。您可以阅读有关内联图片here

的更多信息