在asp mvc中显示数据库中的图像

64 c# asp.net-mvc

我从控制器获取字节数组格式的图像,如何在视图中显示?以最简单的方式.

tva*_*son 122

创建一个控制器,用于显示带有Show动作的图像,该动作将从数据库中显示图像的id.该操作应返回包含具有适当内容类型的图像数据的FileResult.

public class ImageController : Controller
{
    public ActionResult Show( int id )
    {
        var imageData = ...get bytes from database...

        return File( imageData, "image/jpg" );
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的视图中,构造图像并使用图像ID使用控制器和操作构建图像的路径.

<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>' />
Run Code Online (Sandbox Code Playgroud)


Bri*_*egg 9

接受使用此答案的答案:

<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>'
Run Code Online (Sandbox Code Playgroud)

很好,但mvc 4过时了.更新的语法现在应该是:

<img src='@Url.Action( "show", "image", new { id = ViewData["imageID"] })' />
Run Code Online (Sandbox Code Playgroud)

此外,我发现当我需要此功能时,我已经将其他数据传递给视图,因此使用Model而不是ViewData会很好.

public class MyModel {
    public string SomeData {get;set;}
    public int FileId {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

从您的控制器:

public ActionResult Index() {
    MyEntity entity = fetchEntity();

    MyModel model = new MyModel {
        SomeData = entity.Data,
        FileId = entity.SomeFile.ID
    };

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

最后从您的角度来看:

<img src='@Url.Action("show", "image", new { id = Model.FileId })' />
Run Code Online (Sandbox Code Playgroud)

控制器上接受答案的"显示"方法可以工作,但我会更改硬编码的"image/jpg"以使用File.ContentType - 您可以将其与byte []一起存储,这样您就不需要猜测用户正在上传自己的图片.


Far*_*med 6

这里的每个答案都可能是正确的,但我认为最简单的方法是获取包含图像的字节数组或模型,然后像这样添加

<img  src="data:image/jpeg;base64,@(Convert.ToBase64String(Model.Picture))">
Run Code Online (Sandbox Code Playgroud)