显示上传的图像

时间:2013-01-02 23:19:22

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

我正在尝试创建一个简单的图库。上传工作,但我有显示这些图像的问题。

在互联网上,我发现这是正确的方法:

    [NotMapped]
    public string ImageUrl
    {
        get
        {
            var isEmpty = String.IsNullOrWhiteSpace(ImgName);

            if(isEmpty)
            {
                return Path.Combine("~/Images", "noImageAvailable.png");
            }else
            {
                return Path.Combine("~/Images/uploaded", ImgName);
            }
        }
    }

并在视图中

@foreach (var item in Model) {
    ...
    @{ var imgPath = HostingEnvironment.MapPath(item.ImageUrl); }
    <img src="@Url.Content(imgPath)"/>

产生:

<img src="C:\......\Images\uploaded\0_634927659072110613.jpg"/>

对我有用的是:

    [NotMapped]
    public string ImageUrl
    {
        get
        {
            var isEmpty = String.IsNullOrWhiteSpace(ImgName);

            if(isEmpty)
            {
                return Path.Combine("../Images", "noImageAvailable.png");
            }else
            {
                return Path.Combine("../Images/uploaded", ImgName);
            }
        }
    }

并在视图中:

@foreach (var item in Model) {
    .....
    <img src="@Url.Content(item.ImageUrl)"/>

产生:

<img src="../Images/uploaded\0_634927649098750170.jpg"/>

说明

有两点不同:

  1. 〜/ Images vs ../ Images
  2. 视图中的行
  3. 有趣的是该行

    <img src="C:\......\Images\uploaded\0_634927659072110613.jpg"/>
    

    静态独立文件中显示图像,而在IIS提供的图像则不显示。只有空白而不是图像。

    我的问题是什么是正确的方法,为什么第一个不起作用?

1 个答案:

答案 0 :(得分:1)

您的代码正在完全按照您的要求进行操作。第一个不起作用,因为var imgPath = HostingEnvironment.MapPath(item.ImageUrl);将服务器上的物理路径返回到图像URL,而不是URL。将第一个块与<img src="@Url.Content(item.ImageUrl)"/>一起使用。这看起来像:

[NotMapped]
public string ImageUrl
{
    get
    {
        var isEmpty = String.IsNullOrWhiteSpace(ImgName);

        if(isEmpty)
        {
            return Path.Combine("~/Images", "noImageAvailable.png");
        }else
        {
            return Path.Combine("~/Images/uploaded", ImgName);
        }
    }
}

与您的观点:

@foreach (var item in Model) {
    .....
    <img src="@Url.Content(item.ImageUrl)"/>
    .net中的
  1. “〜/ Images / ...”从网络根目录中找到文件夹Images, 然后......
  2. “../ Images / ...”相对于当前位置 - 上升 一个文件夹,找到文件夹图像,然后......