我有以下代碼:如何判斷Image.FromStream完成
var request = (HttpWebRequest)HttpWebRequest.Create(url);
var response = request.GetResponse();
var stream = response.GetResponseStream();
if (stream != null) {
Image newImage = Image.FromStream(stream, true);
pic.Thumb = newImage.ImageToByteArray();
}
會發生什麼,如果讀超時?或者連接中止下載?
文檔說它會拋出一個ArgumentException
如果它不是一個有效的格式或爲null,但我不知道如果它將拋出該異常,如果圖像只是部分下載。
不幸的是,我不能依賴ContentLength頭來告訴我文件的大小,因爲服務器在於並且給出了比文件實際長度更大的內容長度。所以我希望Image.FromStream能夠判斷圖像是否完整。
任何人都可以提供一些見解嗎?
注:ImageToByteArray僅僅是使用內存流轉換的Image
到byte[]
更新擴展方法:
據達林,那麼ExternalException被拋出當您嘗試保存圖像。但是,我自己的截斷圖像文件的測試顯示,如果圖像不是正確的字節數,FromStream
確實會拋出ArgumentException。
對,這很有道理。如果服務器不發送完整圖像會發生什麼情況? (假設他們有負載問題,並在他們的後端獲取超時,併發送一個部分圖像,但否則連接是正常的) –
@Mystere人,我不明白。你的意思是服務器發送一個無效圖像的字節數組,就像託管一個損壞圖像的遠程資源一樣?如果是,那麼當你試圖將這個流加載到Image GDI +對象('Image.FromStream'方法)時,你會得到'ArgumentException'。 –
我的意思是,我不確定Image類是否會將部分圖像檢測爲無效並引發ArgumentException。 –