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

Posted

技术标签:

【中文标题】如何在视图中显示之前检查文件扩展名【英文标题】: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   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 类型。 【参考方案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;
        
    

【讨论】:

以上是关于如何在视图中显示之前检查文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章

如何在不检查路径扩展名的情况下检查文件是不是为图像文件?

如何在 bash 脚本中检查文件名的扩展名?

.bat如何才能后台运行

如何在反应中上传时检查受限制的文件

如何在Flutter中读取音频扩展并在ListView中显示?

在objective-c中检查文件扩展名