2017-08-26 32 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."); 
}