ASP.NET MVC:从字节数组创建图像

20

目前,我在ViewModel中有一个表示图像的字节数组。我使用以下代码显示它:

<img src="@String.Format("data:image/gif;base64,{0}", Convert.ToBase64String(Model.Image))" />

现在我不想在我的源文件中有一个Base64字符串,而是想要一个指向图片的链接。比如:

<img src="Images/" + Model.Id"/>

我该怎样编写这样一个方法来返回一个图片链接?

2个回答

45
你可以定义一个控制器动作来提供图像:
public class ImagesController: Controller
{
    public ActionResult Index(int id)
    {
        byte[] imageData = ... go get your image data from the id
        return File(imageData, "image/png"); // Might need to adjust the content type based on your actual image type
    }
}

根据您的观点,只需将img标签的src属性指向此控制器操作:

<img src="@Url.Action("Index", "Images", new { id = Model.Id })" />

生成的文件是临时的吗? - notsoux
2
@notsoux,在这里没有涉及到任何文件。服务器会直接从数据库向客户端流式传输数据,而不创建任何文件。客户端可以自行决定如何处理这个流。 - Darin Dimitrov
“由客户端决定如何处理此流。” 说得好... :) - refactor

11

一种方法是将此添加到新的C#类或HtmlExtensions类中。

public static class HtmlExtensions
{
    public static MvcHtmlString Image(this HtmlHelper html, byte[] image)
    {
        var img = String.Format("data:image/jpg;base64,{0}", Convert.ToBase64String(image));
        return new MvcHtmlString("<img src='" + img + "' />");
    }
}

那么您可以在任何视图中执行此操作

@Html.Image(Model.MyImageBytes)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接