mak*_*mbi 6 asp.net-mvc file-upload
我有我的控制器
[HttpPost]
public ActionResult ChangeAvatar(HttpPostedFileBase file)
{
AvatarHelper.AvatarUpdate(file, User.Identity.Name);
return RedirectToAction("Index", "Profile");
}
Run Code Online (Sandbox Code Playgroud)
我已经检查文件是否是jpeg/png格式:
private static bool IsImage(string contentType)
{
return AllowedFormats.Any(format => contentType.EndsWith(format,
StringComparison.OrdinalIgnoreCase));
}
public static List<string> AllowedFormats
{
get { return new List<string>() {".jpg", ".png", ".jpeg"}; }
}
Run Code Online (Sandbox Code Playgroud)
我需要的是 - 它确保上传的文件是真实的图像文件,而不是带有图像扩展名的txt文件.
我将上传的文件转换为:
using (var image = System.Drawing.Image.FromStream(postedFile.InputStream))
{
///image stuff
}
Run Code Online (Sandbox Code Playgroud)
我在考虑从输入流创建图像的try/catch块,但我想知道是否有好的方法可以做到这一点?谢谢)
PS
我想知道是否有另一种(更有效的方式尝试/捕获阻止)方式来检查文件是否是真实的图像?
您可以使用该RawFormat属性:
private static ImageFormat[] ValidFormats = new[] { ImageFormat.Jpeg, ImageFormat.Png };
public bool IsValid(Stream image)
{
try
{
using (var img = Image.FromStream(file.InputStream))
{
return ValidFormats.Contains(img.RawFormat);
}
}
catch
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
您也可以将此验证逻辑放入可重用的验证属性中,如我所示this post.
| 归档时间: |
|
| 查看次数: |
5978 次 |
| 最近记录: |