【问题标题】:asp.net display image from sqlreaderasp.net 显示来自 sqlreader 的图像
【发布时间】:2016-10-07 14:44:57
【问题描述】:

如何让网页上的图像控件从 sqlreader 显示?

我有一个带有二进制数据和内容类型字段的 sqlreader,但不知道如何让它显示到我页面上的图像控件。

找到了“GetStream”方法,但找不到我需要的语法。

来自 sqlreader 的字段是: Image1,用于二进制数据 Image1Content,用于内容类型 (image/jpg) Image1Name,用于图像名称

页面上的图像控件是“Image1”

我正在后面的页面上分配其他控件,并希望对图像控件执行相同的操作。

试过了,但最后在 reader["Image1"] 中出现错误:

 while (reader.Read())
                Image1.ImageUrl = reader.GetStream("data:image/jpg;base64," + Convert.ToBase64String((byte[])reader.["Image1"]));

【问题讨论】:

  • 有两种方法。 1)简单,2)不简单。 1)使用base64和数据协议进行图像。 2)您必须输入图像的ID,并使用ashx从数据库中获取图像。在阅读器中使用函数 getBytes 或 getStream。
  • @nick_n_a 请看我刚刚添加的代码。
  • 如果您使用的是 Visual Studio,您可以通过键入 reader.GetStream( 来找出语法 - 它会告诉您它需要一个 intGet to know MSDN documentation.
  • 我是 asp.net 的新手,我不知道如何让 GetBytes 或 GetStream 从 SqlDataReader 读取存储在 Image1 字段中的二进制数据。

标签: c# asp.net


【解决方案1】:

分多个步骤做事总是有帮助的,这样您就可以更清楚地看到哪里出了问题。你不需要GetStream()reader["Image1"],它们几乎完成了同样的事情。我将演示后者,因为我不知道Image1 的索引是什么:

while (reader.Read())
{
    byte[] imgBytes = (byte[])reader["Image1"];
    string encodedBytes = Convert.ToBase64String(imgBytes);
    string url = string.Concat("data:image/jpg;base64,", encodedBytes);
    Image1.ImageUrl = url;
}

但是,如果您有不止一行,您将在 Read() 的每次迭代中覆盖图像 url。我怀疑那是你打算做的,但我不能说。我怀疑您只想调用一次Read(),而不是在while 循环中,但如果只有一行,您不会注意到差异。

【讨论】:

  • Crowcoder 我认为这是我需要/正在寻找的路径。请原谅新手的问题,但是我不确定 //... 在此处设置您的图片网址会发生什么。图像数据在阅读器中为“Image1”(也有图像 2-4)和网页上名为 image1 的图像控件。我之前为图像控件设置了 url,但没有像这样引用代码隐藏项。你是对的,因为我不需要循环。这用于显示单个数据库记录的详细信息。
  • @BrentOliver,见编辑。在我知道什么是数据 URL 之前,我认为我没有使用过 Web 表单,但尝试设置 ImageUrl
  • 行得通,谢谢,现在可以看到所有四张图片了。
  • 这只是小图片的好方法,导致base64格式扩展页面大小和总页面加载速度太慢。
  • @nick_n_a,这个概括太笼统了。有利有弊,您必须根据情况进行分析并采取最适合的方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
  • 2011-06-08
  • 2011-04-01
  • 2014-04-08
  • 2018-08-05
  • 2011-07-06
  • 2016-10-26
相关资源
最近更新 更多