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