2011-09-18 128 views
2

我有以下代碼:如何判斷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僅僅是使用內存流轉換的Imagebyte[]

更新擴展方法:

據達林,那麼ExternalException被拋出當您嘗試保存圖像。但是,我自己的截斷圖像文件的測試顯示,如果圖像不是正確的字節數,FromStream確實會拋出ArgumentException。

回答

4

如果讀取超時會發生什麼?

在輸入if條件之前將拋出異常。

或者連接被中止?

在輸入if條件之前將拋出異常。

但我不知道如果它會拋出該例外,如果圖像只是部分下載。

圖像無法部分下載。 GetResponseStream是一種阻塞方法,意思是說你得到了一切,或者是一個異常(或者你的情況當然你也可以得到一個異常,如果你獲取的不是圖像,而是一些HTML頁面,當你嘗試實例化圖像GDI +對象)。作爲一個方面說明,爲避免泄漏,您可能還想將此可用的資源包裝到using聲明中。

+0

對,這很有道理。如果服務器不發送完整圖像會發生什麼情況? (假設他們有負載問題,並在他們的後端獲取超時,併發送一個部分圖像,但否則連接是正常的) –

+0

@Mystere人,我不明白。你的意思是服務器發送一個無效圖像的字節數組,就像託管一個損壞圖像的遠程資源一樣?如果是,那麼當你試圖將這個流加載到Image GDI +對象('Image.FromStream'方法)時,你會得到'ArgumentException'。 –

+0

我的意思是,我不確定Image類是否會將部分圖像檢測爲無效並引發ArgumentException。 –

相關問題