我已經編寫了一些代碼來從我的Blogger博客導入內容。一旦我下載了所有的HTML內容,我就會瀏覽圖片標籤並下載相應的圖片。在很多情況下,System.Drawing.Bitmap.FromStream拋出一個ArgumentException。我從下載的網址看起來很不錯,並按照預期提供了一張圖片(以下是其中一張問題圖片的網址:http://4.bp.blogspot.com/_tSWCyhtOc38/SgIPcctWRZI/AAAAAAAAAGg/2LLnVPxsogI/s1600-h/IMG_3590.jpg)。ArgumentException從流中實例化位圖
private static System.Drawing.Image DownloadImage(string source)
{
System.Drawing.Image image = null;
// used to fetch content
var client = new HttpClient();
// used to store image data
var memoryStream = new MemoryStream();
try
{
// fetch the image
var imageStream = client.GetStreamAsync(source).Result;
// instantiate a system.drawing.image from the data
image = System.Drawing.Bitmap.FromStream(imageStream, false, false);
// save the image data to a memory stream
image.Save(memoryStream, image.RawFormat);
}
catch (IOException exception)
{
Debug.WriteLine("{0} {1}", exception.Message, source);
}
catch (ArgumentException exception)
{
// sometimes, an image will link to a web page, resulting in this exception
Debug.WriteLine("{0} {1}", exception.Message, source);
}
catch (AggregateException exception)
{
// sometimes, an image src will throw a 404
Debug.WriteLine("{0} {1}", exception.Message, source);
}
finally
{
// clean up our disposable resources
client.Dispose();
memoryStream.Dispose();
}
return image;
}
任何想法爲什麼一個ArgumentException在這裏被拋出?
編輯:發生,我認爲這可能是一個代理髮行,所以我增加了以下到我的web.config:
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
並稱部分並沒有作出任何區別,但是。
編輯:此代碼從EF數據庫初始值設定項的上下文中調用。這裏有一個堆棧跟蹤:
Web.dll Web.Models.Initializer.DownloadImage(字符串源)234線C# Web.dll Web.Models.Initializer.DownloadImagesForPost.AnonymousMethod__5(HtmlAgilityPack.HtmlNode標籤)線! 126 + 0x8字節C# [External Code] Web.dll!Web.Models.Initializer.DownloadImagesForPost(Web.Models.Post post)119+ 0x34 bytes C# Web.dll!Web.Models.Initializer.Seed(Web .Models.FarmersMarketContext上下文)線320 + 0XB字節C# [外部代碼] App_Web_l2h4tcej.dll!ASP._Page_Views_Home_Index_cshtml.Execute()線28個+ 0×15字節C# [外部代碼]
你確定圖像的來源始終是一個有效的URI嗎?有時它可能是一個相對地址,這對Blogger路徑有意義,但不能使用HttpClient進行檢索。 – 2012-07-10 14:27:24
好吧,我剛剛讀完你的整個問題,對於無用的評論抱歉。 – 2012-07-10 14:27:51
一個Stacktrace將有助於查明原因,但關閉我的頭頂,我會建議'imageStream'在某種程度上是畸形的。 – xiy 2012-07-10 14:31:18