你的位置:首页 > ASP.net教程

[ASP.net教程]批量下载图片


  1. 效果图

2. 主要代码:

private async void button_Click(object sender, RoutedEventArgs e)    {      var htmlContent = await FileDownLoader.Instance.GetAsync(webUrl.Text);      HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();      doc.LoadHtml(htmlContent);      label1.Content = "";      var nodeCollection= doc.DocumentNode.SelectNodes("//img");      if(nodeCollection!=null)      {        string imgDirectory = System.IO.Path.Combine(Environment.CurrentDirectory, "Imgs");        if(!Directory.Exists(imgDirectory))        {          Directory.CreateDirectory(imgDirectory);        }        progressBar.Maximum = nodeCollection.Count;        progressBar.Value = 0;        int errorCount = 0;        foreach (var item in nodeCollection)        {          progressBar.Value += 1;          try          {            var imgSrc=item.GetAttributeValue("src", null);            MyImg img = new MyImg(imgSrc);            if(!string.IsNullOrEmpty(img.FileName))            {             await FileDownLoader.Instance.DownLoadImg(img, imgDirectory);            }             }          catch (Exception ex)          {            errorCount += 1;          }          label1.Content = "第"+progressBar.Value+"个图片,共"+ progressBar.Maximum+"个图片,"+errorCount+"个错误";        }        progressBar.Value = progressBar.Maximum;      }

  

 public class FileDownLoader  {    HttpClient httpClient = new HttpClient();    public static FileDownLoader Instance = new FileDownLoader();    public async Task DownLoadImg(MyImg img,string imgDirectory)    {      var imgData = await httpClient.GetByteArrayAsync(img.ImgSrc);      string newfilename = System.IO.Path.Combine(imgDirectory, img.FileName);      using (var stream = File.Open(newfilename, FileMode.Create))      {        await stream.WriteAsync(imgData, 0, imgData.Length);      };    }    public async Task<string> GetAsync(string url)    {     var response= await httpClient.GetAsync(url);      return await response.Content.ReadAsStringAsync();    }  }

 

  public class MyImg  {    public MyImg(string imgSrc)    {      if (imgSrc != null)      {        var startIndex = imgSrc.LastIndexOf(@"/");        var startIndex1 = imgSrc.LastIndexOf(".");        FileName = imgSrc.Substring(startIndex + 1, startIndex1 - startIndex + 3);        ImgSrc = imgSrc;      }    }    public string FileName { get; set; }    public string ImgSrc { get; set; }  }