• C#图片批量下载Demo


    目录

    效果

    项目

    代码

    下载


    效果

    C#图片批量下载

    项目

    代码

    using Aspose.Cells;
    using NLog;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Drawing;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace DownloadDemo
    {
        public partial class frmMain : Form
        {
            public frmMain()
            {
                InitializeComponent();
                NLog.Windows.Forms.RichTextBoxTarget.ReInitializeAllTextboxes(this);
            }

            String startupPath;
            private string excelFileFilter = "表格|*.xlsx;*.xls;";
            private Logger log = NLog.LogManager.GetCurrentClassLogger();
            CancellationTokenSource cts;
            List ltImgInfo = new List();

            bool saveImg = false;

            private void frmMain_Load(object sender, EventArgs e)
            {
                startupPath = System.Windows.Forms.Application.StartupPath;

                ServicePointManager.Expect100Continue = false;
                ServicePointManager.DefaultConnectionLimit = 512;
            }

            ///


            /// 选择表格
            ///

            ///
            ///
            private void button2_Click(object sender, EventArgs e)
            {
                try
                {
                    OpenFileDialog ofd = new OpenFileDialog();
                    ofd.Filter = excelFileFilter;
                    if (ofd.ShowDialog() != DialogResult.OK) return;
                    string excelPath = ofd.FileName;

                    Workbook workbook = new Workbook(excelPath);
                    Cells cells = workbook.Worksheets[0].Cells;
                    System.Data.DataTable dataTable1 = cells.ExportDataTable(1, 0, cells.MaxDataRow, cells.MaxColumn + 1);//noneTitle

                    //遍历
                    ltImgInfo.Clear();
                    ImgInfo temp;
                    int imgCount = 0;
                    foreach (DataRow row in dataTable1.Rows)
                    {
                        temp = new ImgInfo();
                        temp.id = row[0].ToString();
                        temp.title = row[1].ToString();

                        List list = new List();
                        for (int i = 2; i < cells.MaxColumn + 1; i++)
                        {
                            string tempStr = row[i].ToString();
                            if (!string.IsNullOrEmpty(tempStr))
                            {
                                list.Add(tempStr);
                            }
                        }
                        temp.images = list;
                        imgCount = imgCount + list.Count();
                        ltImgInfo.Add(temp);
                    }
                    log.Info("解析完毕,一共[" + ltImgInfo.Count + "]条记录,[" + imgCount + "]张图片!");
                }
                catch (Exception ex)
                {
                    log.Error("解析表格异常:" + ex.Message);
                    MessageBox.Show("解析表格异常:" + ex.Message);
                }
            }

            void ShowCostTime(string total, string ocrNum, long time)
            {
                txtTotal.Invoke(new Action(() =>
                {
                    TimeSpan ts = TimeSpan.FromMilliseconds(time);
                    txtTotal.Text = string.Format("完成:{0}/{1},用时:{2}"
                        , ocrNum
                        , total
                        , ts.ToString()
                        );
                }));
            }

            ///


            /// 下载
            ///

            ///
            ///
            private void button1_Click(object sender, EventArgs e)
            {
                if (ltImgInfo.Count == 0)
                {
                    MessageBox.Show("请先选择表格!");
                    return;
                }

                if (!Directory.Exists("img"))
                {
                    Directory.CreateDirectory("img");
                }

                if (!Directory.Exists("result"))
                {
                    Directory.CreateDirectory("result");
                }

                btnStop.Enabled = true;
                chkSaveImg.Enabled = false;

                if (chkSaveImg.Checked)
                {
                    saveImg = true;
                }
                else
                {
                    saveImg = false;
                }

                Application.DoEvents();

                cts = new CancellationTokenSource();
                Task.Factory.StartNew(() =>
                {

                    int totalCount = ltImgInfo.Count();
                    Stopwatch total = new Stopwatch();
                    total.Start();  //开始计时
                    for (int i = 0; i < ltImgInfo.Count(); i++)
                    {

                        //判断是否被取消;
                        if (cts.Token.IsCancellationRequested)
                        {
                            return;
                        }

                        Stopwatch perID = new Stopwatch();
                        perID.Start();//开始计时
                        int imagesCount = ltImgInfo[i].images.Count();
                        for (int j = 0; j < imagesCount; j++)
                        {
                            try
                            {
                                Stopwatch sw = new Stopwatch();
                                sw.Start();  //开始计时
                                HttpWebRequest request = WebRequest.Create(ltImgInfo[i].images[j]) as HttpWebRequest;
                                request.KeepAlive = false;
                                request.ServicePoint.Expect100Continue = false;
                                request.Timeout = 1000;// 1秒
                                request.ReadWriteTimeout = 1000;//1秒

                                request.ServicePoint.UseNagleAlgorithm = false;
                                request.ServicePoint.ConnectionLimit = 65500;
                                request.AllowWriteStreamBuffering = false;
                                request.Proxy = null;

                                request.CookieContainer = new CookieContainer();
                                request.CookieContainer.Add(new Cookie("AspxAutoDetectCookieSupport", "1") { Domain = new Uri(ltImgInfo[i].images[j]).Host });

                                HttpWebResponse wresp = (HttpWebResponse)request.GetResponse();
                                Stream s = wresp.GetResponseStream();
                                Bitmap bmp = (Bitmap)System.Drawing.Image.FromStream(s);
                                s.Dispose();
                                wresp.Close();
                                wresp.Dispose();
                                request.Abort();

                                sw.Stop();
                                log.Info("  " + j + "-->下载用时:" + sw.ElapsedMilliseconds + "毫秒");
                                sw.Restart();

                                if (saveImg)
                                {
                                    bmp.Save("img//" + i + "_" + j + ".jpg");
                                }

                            }
                            catch (Exception ex)
                            {
                                log.Error(i + "/" + totalCount + "---->id:" + ltImgInfo[i].id + ",url[" + ltImgInfo[i].images[j] + "],异常:" + ex.Message);
                            }
                        }
                        perID.Stop();
                        log.Info(i + "/" + totalCount + "---->id:" + ltImgInfo[i].id + ",图片张数[" + imagesCount + "],小计用时:" + perID.ElapsedMilliseconds + "毫秒");

                        ShowCostTime(totalCount.ToString(), i.ToString(), total.ElapsedMilliseconds);
                    }
                    total.Stop();
                    log.Info("全部[" + totalCount + "]共计用时:" + total.ElapsedMilliseconds + "毫秒");
                }, TaskCreationOptions.LongRunning);
            }

            ///


            /// 停止
            ///

            ///
            ///
            private void button3_Click(object sender, EventArgs e)
            {
                cts.Cancel();
                btnStop.Enabled = false;
                btnStart.Enabled = true;

                chkSaveImg.Enabled = true;
            }
        }
    }

    1. using Aspose.Cells;
    2. using NLog;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.Data;
    6. using System.Diagnostics;
    7. using System.Drawing;
    8. using System.IO;
    9. using System.Linq;
    10. using System.Net;
    11. using System.Threading;
    12. using System.Threading.Tasks;
    13. using System.Windows.Forms;
    14. namespace DownloadDemo
    15. {
    16. public partial class frmMain : Form
    17. {
    18. public frmMain()
    19. {
    20. InitializeComponent();
    21. NLog.Windows.Forms.RichTextBoxTarget.ReInitializeAllTextboxes(this);
    22. }
    23. String startupPath;
    24. private string excelFileFilter = "表格|*.xlsx;*.xls;";
    25. private Logger log = NLog.LogManager.GetCurrentClassLogger();
    26. CancellationTokenSource cts;
    27. List<ImgInfo> ltImgInfo = new List<ImgInfo>();
    28. bool saveImg = false;
    29. private void frmMain_Load(object sender, EventArgs e)
    30. {
    31. startupPath = System.Windows.Forms.Application.StartupPath;
    32. ServicePointManager.Expect100Continue = false;
    33. ServicePointManager.DefaultConnectionLimit = 512;
    34. }
    35. /// <summary>
    36. /// 选择表格
    37. /// </summary>
    38. /// <param name="sender"></param>
    39. /// <param name="e"></param>
    40. private void button2_Click(object sender, EventArgs e)
    41. {
    42. try
    43. {
    44. OpenFileDialog ofd = new OpenFileDialog();
    45. ofd.Filter = excelFileFilter;
    46. if (ofd.ShowDialog() != DialogResult.OK) return;
    47. string excelPath = ofd.FileName;
    48. Workbook workbook = new Workbook(excelPath);
    49. Cells cells = workbook.Worksheets[0].Cells;
    50. System.Data.DataTable dataTable1 = cells.ExportDataTable(1, 0, cells.MaxDataRow, cells.MaxColumn + 1);//noneTitle
    51. //遍历
    52. ltImgInfo.Clear();
    53. ImgInfo temp;
    54. int imgCount = 0;
    55. foreach (DataRow row in dataTable1.Rows)
    56. {
    57. temp = new ImgInfo();
    58. temp.id = row[0].ToString();
    59. temp.title = row[1].ToString();
    60. List<string> list = new List<string>();
    61. for (int i = 2; i < cells.MaxColumn + 1; i++)
    62. {
    63. string tempStr = row[i].ToString();
    64. if (!string.IsNullOrEmpty(tempStr))
    65. {
    66. list.Add(tempStr);
    67. }
    68. }
    69. temp.images = list;
    70. imgCount = imgCount + list.Count();
    71. ltImgInfo.Add(temp);
    72. }
    73. log.Info("解析完毕,一共[" + ltImgInfo.Count + "]条记录,[" + imgCount + "]张图片!");
    74. }
    75. catch (Exception ex)
    76. {
    77. log.Error("解析表格异常:" + ex.Message);
    78. MessageBox.Show("解析表格异常:" + ex.Message);
    79. }
    80. }
    81. void ShowCostTime(string total, string ocrNum, long time)
    82. {
    83. txtTotal.Invoke(new Action(() =>
    84. {
    85. TimeSpan ts = TimeSpan.FromMilliseconds(time);
    86. txtTotal.Text = string.Format("完成:{0}/{1},用时:{2}"
    87. , ocrNum
    88. , total
    89. , ts.ToString()
    90. );
    91. }));
    92. }
    93. /// <summary>
    94. /// 下载识别
    95. /// </summary>
    96. /// <param name="sender"></param>
    97. /// <param name="e"></param>
    98. private void button1_Click(object sender, EventArgs e)
    99. {
    100. if (ltImgInfo.Count == 0)
    101. {
    102. MessageBox.Show("请先选择表格!");
    103. return;
    104. }
    105. if (!Directory.Exists("img"))
    106. {
    107. Directory.CreateDirectory("img");
    108. }
    109. if (!Directory.Exists("result"))
    110. {
    111. Directory.CreateDirectory("result");
    112. }
    113. btnStop.Enabled = true;
    114. chkSaveImg.Enabled = false;
    115. if (chkSaveImg.Checked)
    116. {
    117. saveImg = true;
    118. }
    119. else
    120. {
    121. saveImg = false;
    122. }
    123. Application.DoEvents();
    124. cts = new CancellationTokenSource();
    125. Task.Factory.StartNew(() =>
    126. {
    127. int totalCount = ltImgInfo.Count();
    128. Stopwatch total = new Stopwatch();
    129. total.Start(); //开始计时
    130. for (int i = 0; i < ltImgInfo.Count(); i++)
    131. {
    132. //判断是否被取消;
    133. if (cts.Token.IsCancellationRequested)
    134. {
    135. return;
    136. }
    137. Stopwatch perID = new Stopwatch();
    138. perID.Start();//开始计时
    139. int imagesCount = ltImgInfo[i].images.Count();
    140. for (int j = 0; j < imagesCount; j++)
    141. {
    142. try
    143. {
    144. Stopwatch sw = new Stopwatch();
    145. sw.Start(); //开始计时
    146. HttpWebRequest request = WebRequest.Create(ltImgInfo[i].images[j]) as HttpWebRequest;
    147. request.KeepAlive = false;
    148. request.ServicePoint.Expect100Continue = false;
    149. request.Timeout = 1000;// 1
    150. request.ReadWriteTimeout = 1000;//1
    151. request.ServicePoint.UseNagleAlgorithm = false;
    152. request.ServicePoint.ConnectionLimit = 65500;
    153. request.AllowWriteStreamBuffering = false;
    154. request.Proxy = null;
    155. request.CookieContainer = new CookieContainer();
    156. request.CookieContainer.Add(new Cookie("AspxAutoDetectCookieSupport", "1") { Domain = new Uri(ltImgInfo[i].images[j]).Host });
    157. HttpWebResponse wresp = (HttpWebResponse)request.GetResponse();
    158. Stream s = wresp.GetResponseStream();
    159. Bitmap bmp = (Bitmap)System.Drawing.Image.FromStream(s);
    160. s.Dispose();
    161. wresp.Close();
    162. wresp.Dispose();
    163. request.Abort();
    164. sw.Stop();
    165. log.Info(" " + j + "-->下载用时:" + sw.ElapsedMilliseconds + "毫秒");
    166. sw.Restart();
    167. if (saveImg)
    168. {
    169. bmp.Save("img//" + i + "_" + j + ".jpg");
    170. }
    171. }
    172. catch (Exception ex)
    173. {
    174. log.Error(i + "/" + totalCount + "---->id:" + ltImgInfo[i].id + ",url[" + ltImgInfo[i].images[j] + "],异常:" + ex.Message);
    175. }
    176. }
    177. perID.Stop();
    178. log.Info(i + "/" + totalCount + "---->id:" + ltImgInfo[i].id + ",图片张数[" + imagesCount + "],小计用时:" + perID.ElapsedMilliseconds + "毫秒");
    179. ShowCostTime(totalCount.ToString(), i.ToString(), total.ElapsedMilliseconds);
    180. }
    181. total.Stop();
    182. log.Info("全部[" + totalCount + "]共计用时:" + total.ElapsedMilliseconds + "毫秒");
    183. }, TaskCreationOptions.LongRunning);
    184. }
    185. /// <summary>
    186. /// 停止
    187. /// </summary>
    188. /// <param name="sender"></param>
    189. /// <param name="e"></param>
    190. private void button3_Click(object sender, EventArgs e)
    191. {
    192. cts.Cancel();
    193. btnStop.Enabled = false;
    194. btnStart.Enabled = true;
    195. chkSaveImg.Enabled = true;
    196. }
    197. }
    198. }

    下载

    源码下载

  • 相关阅读:
    资料 - hawei EulerOS的主页入口
    jQuery效果演示
    基于指数分布优化的BP神经网络(分类应用) - 附代码
    2023年中国新能源汽车电动助力转向系统行业现状分析:随着新能源汽车的发展,产品渗透率的提升[图]
    【LeetCode热题100】--114.二叉树展开为链表
    (二)安装SVN服务器,web管理界面
    Java 框架、库和软件的精选列表(awesome java)
    2023年AI十大展望:GPT-4领衔大模型变革,谷歌拉响警报,训练数据告急
    hiredis笔记
    复习单片机:蜂鸣器(内含:1 蜂鸣器介绍+2 硬件设计+3 软件设计+4.原始代码+5 实验现象)
  • 原文地址:https://blog.csdn.net/lw112190/article/details/140920080