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();
我无法在我的页面上写入实际上是图像的字节数据。 我看到的是一系列特殊人物。我做错了什么?
答案 0 :(得分:3)
我怀疑你是在尝试将图像直接写入不属于它的HTML中。您的页面应该有一个img
元素,该元素使用一个URL返回您的服务器,该URL可以让您在该请求进入时获取ID ...当您提供实际图像时 数据以及适当的内容类型。
当然,我可能在这里偏离基地......你没有向我们提供任何背景信息(比如此请求还提供了其他服务......)。
其他要点:
using
上使用SqlConnection
语句,以便在发生任何事情时关闭DataSet
或SqlDataAdapter
毫无意义。为什么不调用ExecuteReader
然后使用GetBytes
来获取数据?答案 1 :(得分:1)
您需要将字节数组转换为有效图像,然后在网页中显示该图像。
答案 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
的更多信息