Javascript (MVC) 从数据库加载图像(字节数组)

Tre*_*ton 3 javascript ajax image bytearray src

这个问题在 Stack 上有很多答案,但没有一个对我有用......

我需要在 javascript 中从我通过对控制器的 ajax 调用检索的字节数组中设置图像标记的“src”属性。我必须做这个客户端,因为我正在动态构建一些 html(在下面的简单示例中未显示)

这是视图:

<div>
<button onclick=" loadFromDb(); ">CLICK ME</button>
<img id="imgFromModel" src="data:image/png;base64,@Convert.ToBase64String(Model.Image)" alt="" />

<img id="imgFromScript" src="#" alt=""/>
</div>
Run Code Online (Sandbox Code Playgroud)

这是脚本:

function loadFromDb() {
    $.ajax({
        url: "/Home/LoadFromDatabase",
        async: true,
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function (response) {
            var base64String = btoa(response.Image);
            $("#imgFromScript").attr("src", "data:image/png;base64," +  base64String);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

图像在“imgFromModel”标签中正确加载,但不是来自脚本(“imgFromScript”标签)。有人可以告诉我如何将控制器方法中的字节数组加载(设置“src”属性)到图像标签中吗?

预先感谢您的帮助

Tre*_*ton 5

经过大量的游戏,睡个好觉和一点运气,这里是解决方案。

我需要向我的模型添加一个字符串属性,将其命名为“ImageBytesAsString”并将 src 设置为我的 ajax 响应中的那个。这是代码..

模型:

public byte[] Image { get; set; }
public string ImageBytesAsString { get; set; }
Run Code Online (Sandbox Code Playgroud)

控制器:

var user = context.Users.FirstOrDefault();
user.ImageBytesAsString = Convert.ToBase64String(user.Image);
Run Code Online (Sandbox Code Playgroud)

爪哇脚本:

    $.ajax({
    url: "/Home/LoadFromDatabase",
    async: true,
    type: "POST",
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (response) {
        $("#imgFromScript").attr("src", "data:image/png;base64," + response.ImageBytesAsString);
    }
});
Run Code Online (Sandbox Code Playgroud)

看法:

<img id="imgFromScript" src="#" alt=""/>
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助别人。