Bloggerブログからコンテンツをインポートするためのコードをいくつか作成しました。すべてのHTMLコンテンツをダウンロードしたら、画像タグを調べて、対応する画像をダウンロードします。多くの場合、System.Drawing.Bitmap.FromStreamはArgumentExceptionをスローしています。ダウンロード元のURLは見栄えがよく、期待どおりに画像が表示されます(問題のある画像の1つのURLは次のとおりです:http://4.bp.blogspot.com/_tSWCyhtOc38/SgIPcctWRZI/AAAAAAAAAGg/2LLnVPxsogI/s1600- h / IMG_3590.jpg)。
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(string source)234行目C#Web.dll!Web.Models.Initializer.DownloadImagesForPost.AnonymousMethod__5(HtmlAgilityPack.HtmlNode tag)126行目+ 0x8バイトC#[外部コード] Web.dll !Web.Models.Initializer.DownloadImagesForPost(Web.Models.Post post)行119 + 0x34バイト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 + 0x15バイトC#[外部コード]