【问题标题】:Display image in view from file system从文件系统的视图中显示图像
【发布时间】:2013-06-18 18:25:24
【问题描述】:

我有一个 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)

这个 item.StoreItemImage 从数据库中获取图像的绝对路径(比如 D:\appName\UserFolder\image.jpg)。这个助手最终渲染成这样

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

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

解决方案

因此,出于记录,我根据 Cory 的建议发布了对我有用的解决方案。我创建了以下操作方法可能对其他人有帮助:

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");
    }

【问题讨论】:

  • 当然不能显示,IIS 没有访问该文件夹的权限,因为它不在 WWW 根目录中。您可以从源中读取原始图像数据并将其临时保存在 IIS 有权访问的文件夹中...

标签: c# asp.net-mvc-4


【解决方案1】:

假设您有某种与数据库中的每个图像相关的键或 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 })" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2012-12-02
    • 2011-05-18
    • 2012-10-24
    • 2021-01-10
    • 2011-05-10
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多