2008/06/11

[ASP.Net]透過WebRequest抓取網路上的圖檔

以下程式是透過 WebRequest 的方式將網路中的圖檔存到本機:

string Url = "http://l.yimg.com/tw.yimg.com/i/tw/hp/spirit/yahoo_logo.gif";
string FullFileName = @"c:\tmp\yahoo_logo.gif";
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(Url);
//預設TimeOut是30秒
webReq.Timeout = 30000;
HttpWebResponse webResp = (HttpWebResponse)webReq.GetResponse();
//檢查儲存的檔案路徑,其目錄是否存在
if (!Directory.Exists(Path.GetDirectoryName(FullFileName)))
{
    //建立目錄
    Directory.CreateDirectory(Path.GetDirectoryName(FullFileName));
}
using (BinaryReader imgStream = new BinaryReader(webResp.GetResponseStream()))
{
    File.WriteAllBytes(FullFileName, imgStream.ReadBytes((int)webResp.ContentLength));
}

後記:
本來是想直接使用 System.Drawing.Image 將 HttpWebResponse 的 Stream 轉為圖檔.
例如以下的程式:

Image.FromStream(webResp.GetResponseStream()).Save(FullFileName, ImageFormat.Gif); 

不過, 很奇怪地, 這樣儲存的 gif 圖檔不僅顏色失真, 也只有一個 frame (gif 檔變成一般的靜態圖).
所以只好用傳統讀 byte[] 的方式逐步寫入檔案.

沒有留言: