如何在视图中显示之前检查文件扩展名
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*@
不确定这是否最佳,但我想不出另一种方法。
【讨论】:
您在不同地方的代码中使用了extn
和extension
。 System.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;
【讨论】:
以上是关于如何在视图中显示之前检查文件扩展名的主要内容,如果未能解决你的问题,请参考以下文章