加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 在Razor/MVC3中显示数据库映像(bytes [])?

发布时间:2020-12-15 18:39:16 所属栏目:asp.Net 来源:网络整理
导读:我从我的MS SQL 2008R2数据库返回一个数据集,其中包含一个数据表,我已经从我的Razor视图获取数据。我添加了一个字节[]字段,其中包含我在该视图上显示的图像缩略图。 由于字节数组相对较小,我想我会尝试显示字节数组的内联。不过阅读后可能会有一些与浏览
我从我的MS SQL 2008R2数据库返回一个数据集,其中包含一个数据表,我已经从我的Razor视图获取数据。我添加了一个字节[]字段,其中包含我在该视图上显示的图像缩略图。

由于字节数组相对较小,我想我会尝试显示字节数组的内联。不过阅读后可能会有一些与浏览器有关的问题,我放弃了这一点。

创建一个控制器方法似乎是要走的路,(这两个方法都找到了here),但是我已经有字节数组准备好在我的视图,而不需要再进行另一个数据库调用来获取它的ID。

做这个,不明显的原因:

…在页面上显示其他数据….

@if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] == null)
{
    <img src="@Url.Content("~/Content/Images/NoPhoto.png")" border="0" />
}
else
{
    <img src="@Url.Action("GetImage","SearchResults",new { imageBytes = Model.dsResults.Tables[0].Rows[i]["ImageBytes"] })" alt="Product Image" />
}

… …

控制器方式:

[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetImage(byte[] imageBytes)
{
    byte[] byteArray = imageBytes;
    return new FileContentResult(byteArray,"image/jpeg");
}

…因为这本质上是尝试通过http发送字节数组。

所以,我的问题是,由于我已经在我的Razor视图中有字节数组,我该如何显示?

– 更新 –

我意识到,不建议在视图中进行处理,但是由于数据已经存在,所以不能这样做:

Response.Write((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]);

要么…

Stream s = new MemoryStream(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
System.Drawing.Image img = new System.Drawing.Bitmap(s);

在其他帖子中,我已经看到你做了一个Response.Write(byte [] …)),但是在这种情况下这不行。

– UPADATE –

在我不断寻求效率(不需要再提出数据库)的情况下,WebImage帮手似乎是一个很好的候选人。其中一个构造函数将接受一个字节数组来初始化该类,然后使用.Write(“jpeg”)方法,我可以看到该图像。

<td>
    @{
        WebImage webImage = new WebImage(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
        webImage.Write("jpeg");
    }
</td>

使用WebImage.Write()的问题是,一旦使用,该图像是在页面上呈现的唯一的东西。有没有办法将其直接渲染到剃须刀视图页面上的“控件”?

– 更新 –

这继续bug我…所以我尝试了以下,我认为可能会工作,因为这是我们正在做的行动…

if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] != DBNull.Value)
{
    var img1 = new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]),"image/jpeg");
    <text>
        <img src="@new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]),"image/jpeg")" />
    </text>
}

…不行

解决方法

Model.Content是一个byte []图像。
@{
    string imageBase64 = Convert.ToBase64String(Model.Content);
    string imageSrc = string.Format("data:image/gif;base64,{0}",imageBase64);
}

这样使用

<img src="@imageSrc" alt="@Model.Name" width="100" height="100" />

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读