【问题标题】:How to check file extension before displaying in view如何在视图中显示之前检查文件扩展名
【发布时间】:2019-06-24 07:15:45
【问题描述】:

我有一个项目需要显示图像和视频。我将图像和视频 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>
                        }

【问题讨论】:

  • 您可以使用 this answer 之类的内容和 HEAD 的注释来探测 URL 的 MIME 类型。

标签: c# asp.net-mvc razor


【解决方案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*@
    }
}

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

【讨论】:

  • 您在不同地方的代码中使用了extnextensionSystem.IO.Path.GetExtension 方法是获取文件路径扩展名的推荐方法。
  • @Jason Brown 谢谢!!它工作得很好。但是为了获得 NetMage 建议的扩展,我使用了 System.IO.Path.GetExtension。
【解决方案2】:

您可以使用HttpClient 来检查 URL 的 Content-Type,然后决定如何处理:

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

【讨论】:

    猜你喜欢
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2017-06-04
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多