2017-08-26 66 views
0

我如何检查图像上传到我的服务器实际上是一个有效的图像?在ASP核心验证/检查图像

我已检查过大小和扩展名,但没有任何东西阻止用户将不支持的文件的文件扩展名更改为支持的某些内容(本例中为.jpg和.png)。

我明白,ASP.NET有Drawing.Image这个,但ASP核心似乎缺乏我可以使用的任何东西。我可以为第三方解决方案提供一些建议吗?

+0

.jpg和.png是唯一支持的格式吗? – jebar8

+0

有问题的图像是用户头像,所以是的。如果用户“伪造”一个jpg文件,该头像将不会正确加载到页面上。 –

回答

1

安装NuGet包CoreCompat.System.Drawing那么你就可以在你的.NET核心项目使用System.Drawing像旧时代:

using System.Drawing; 
+0

我来看看吧!谢谢:) –

+0

@Braed不客气。我已经在我的两个项目中使用过它。 –

+0

请原谅我的无知,但我会如何将其添加到我的项目?它没有NuGet包,我需要.NET Core 2.0版本。 –

1

这不会验证整个图像,但您可以检查文件的前几个字节,以确保它包含有效的JPGPNG标头。这样可以防止一小部分用户上传虚假图像,并防止您花费资源将整个图像加载到内存中进行检查。

+0

很棒的建议!无论如何,我正在考虑处理图像分辨率,但如果我选择不去,我会与此一起去。干杯。 –

0

使用CoreCompat.System.Drawing我已经作出了形象的有效性进行简单的检查,如下图所示。如果“图片”无法打开,那么它是腐败或假的,并会抛出一个我正在捕捉的异常。不完全是最好的解决方案,所以如果有人有更好的解决方案,让我知道!

try 
{ 
    var img = System.Drawing.Image.FromStream(file.OpenReadStream()); 
} 
catch 
{ 
    return BadRequest("Invalid image."); 
}