在视图中显示之前如何检查文件扩展名

时间:2019-01-30 22:00:57

标签: c# asp.net-mvc razor

我有一个项目,需要显示图像和视频。我将图像和视频URL都保存在名为 Images 的表中,并且在检索的同时,我使用图像处理程序在服务器级别调整图像的大小。 现在,我用于显示图像和视频的代码就是这一行

<td>
                                <img src="~/ImageHandler.ashx?file=@Html.DisplayFor(modelItem => item.url)" />
                            </td>

在显示之前,我需要类似下面的内容来识别文件扩展名。如果扩展名是png或jpeg,请转到此行,否则转到此行。我该如何喜欢以下或其他更好的选择?

                        @foreach (var item in Model)
                        {
                            <tr>
                                if (extension == .png || extension == .jpeg )
                                {
                                <td>
                                    <img src="~/ImageHandler.ashx?file=@Html.DisplayFor(modelItem => item.url)" />
                                </td>
                                }
                                else
                                {
                                <td>
                                    <video width="240" height="240" autoplay>
                                        <source src="@Html.DisplayFor(modelItem => item.url)" type="video/mp4">
                                    </video>
                                </td>
                                }
                                <td>
                                    @Html.DisplayFor(modelItem => item.details)
                                </td>
                            </tr>
                        }

2 个答案:

答案 0 :(得分:1)

如果模型仅包含文件的url /路径,则可以使用定界符“。”分割字符串。并获取结果字符串数组中的最后一个元素。
例如:

@foreach(var item in Model)
{
    var extn = item.url.Split(".").Last();
    if (extn == ".png" || extn == ".jpeg" )
    {
        @*Do image display*@
    }
    else
    {
       @*Do video display*@
    }
}

不确定这是否是最佳选择,但我想不出另一种方法。

答案 1 :(得分:0)

您可以使用HttpClient检查URL的内容类型,然后再决定如何处理它:

public static class URLExt {
    public static string GetMimeType(this string url) {
        using (var client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true })) {
            var r = client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false).GetAwaiter().GetResult();
            return r.IsSuccessStatusCode ? r.Content.Headers.ContentType.MediaType : null;
        }
    }
}