从文件系统显示视图中的图像

本文关键字:图像 视图 文件系统 显示 | 更新日期: 2023-09-27 18:18:51

我有一个ASP。. NET MVC 4 web应用程序,驻留在服务器上的C:'inetpub'wwwroot'appName目录。我想将用户上传的图像存储在D:'appName'UserFolder'目录中,然后在剃刀视图中显示这些图像。我已经创建了以下html帮助器:

public static class MyHtmlHelpers
{
    public static IHtmlString UploadedImage(this HtmlHelper htmlHelper, string url)
    {
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        var image = new TagBuilder("img");
        image.Attributes["src"] = UrlHelper.GenerateContentUrl(url, htmlHelper.ViewContext.HttpContext);
        return MvcHtmlString.Create(image.ToString(TagRenderMode.SelfClosing));
    }
}

,我这样使用上面的帮助器:

@Html.UploadedImage(item.StoreItemImage)
这个<

strong>项目。StoreItemImage从数据库中获取图像的绝对路径(假设为D:'appName'UserFolder'image.jpg)。这个helper最终呈现如下

<img src="D:'appName'UserFolder'image.jpg" />

浏览器中不显示该图像。此外,要显示应用程序存储图像的实际服务器路径,这也不是一种优雅和安全的方式。有什么解决办法吗?谢谢你。

<

解决方案/strong>

所以只是为了记录,我张贴解决方案,为我工作,根据科里的建议。我创建了下面的动作方法,可能对其他人有帮助:

public FileResult GetImage(string fileLocation)
    {
        Image image = Image.FromFile(fileLocation);
        byte[] imageArray;
        using (var memoryStream = new MemoryStream())
        {
            image.Save(memoryStream, ImageFormat.Jpeg);
            imageArray = memoryStream.ToArray();
        }
        return File(imageArray, "image/jpeg");
    }

从文件系统显示视图中的图像

假设您有与数据库中的每个图像相关的某种键或ID,您可以通过操作呈现图像源(仅使用数据库ID来引用它)来"隐藏"图像源:

public ActionResult GetImage(int dbId)
{
    byte[] image = LoadImageFromDatabase(dbId);
    return File(image, "image/jpeg");
}

并在视图中使用这个标记:

<img src="@Url.Action("GetImage", new { dbId = Model.PhotoDatabaseId })" />