public virtual void RunUpload(IEnumerable <PictureItem> items, BackgroundWorker bw) { this.BW = bw; CreateDirectory(UploadFolder); BW.ReportProgress(0, "Сохранение фото..."); ProgressTicker ticker = new ProgressTicker(items.Count(), 20); ticker.ProgressChanged += Ticker_ProgressChanged; foreach (var item in items) { try { if (!ImageDownloadHelper.IsUrlImage((item.Address))) { throw new Exception("Скачиваемый контент не является графическим изображением."); } byte[] imageByteArray = ImageDownloadHelper.DownloadData(item.Address); string ext = imageByteArray.GetExtention(); string pictureName = $"{item.Name}.{ext}"; item.Address = UploadPicture(imageByteArray, pictureName); item.Status = true; ticker.Tick(); } catch (Exception ex) { item.Status = false; item.Address += $" Ошибка: {ex.Message}."; } } ticker = null; }
static void Main(string[] args) { ILog log = new ConsolePrintLog(); IConfiguration configuration = args.BuildCreateConfiguration(); var logArgs = new Dictionary <string, object>(); Encoding encoding = configuration.ExplainConfigurationEncoding(); string urls_path = configuration.GetConfigKey("urls-path", "urls-path"); urls_path = FilePathExtend.ToAbsolutePath(urls_path); logArgs["--urls-path"] = urls_path; if (string.IsNullOrEmpty(urls_path)) { log.Error("请输入参数: --urls-path=\"XXX\" 下载图片列表存储文件路径!", logArgs); return; } string is_override_argString = configuration.GetConfigKey("is-override", "is-override"); if (!bool.TryParse(is_override_argString, out bool is_override)) { logArgs["--is-override"] = is_override_argString; is_override = false; log.Info("参数 --is-override=\"{True|False}\" 无法取到正常值, 已默认为 False 执行后续逻辑!", logArgs); } logArgs["--is-override"] = is_override; log.Info($"参数解析完成", logArgs); if (!File.Exists(urls_path)) { log.Error("下载图片列表存储文件不存在!", logArgs); return; } var imgDownHelper = new ImageDownloadHelper(log, 3); string[] lines = File.ReadAllLines(urls_path, encoding); lines = lines.Distinct().ToArray(); Regex imgUrlRegex = new Regex(@"^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)?((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.[a-zA-Z]{2,4})(\:[0-9]+)?(/[^/][a-zA-Z0-9\.\,\?\'\\/\+&%\$#\=~_\-@]*)*$"); IList <Task> tasks = new List <Task>(); foreach (string line in lines) { if (!imgUrlRegex.IsMatch(line)) { continue; } string imageUrl = line; var match = imgUrlRegex.Match(line); string imageSavePath = match.Groups[2].Value; var task = imgDownHelper.DownloadAsync(imageUrl, imageSavePath); tasks.Add(task); } Task.WaitAll(tasks.ToArray()); }
public void Download() { ILog log = new LogUniversal(); var helper = new ImageDownloadHelper(log); string imgurl = @"https://ytsimg.gitee.io/blog/favicon/TopHead.jpg"; string filepath = @"C:\test_download_image.jpg"; ExecuteResultStatue statue = helper.Download(imgurl, filepath); Assert.AreEqual(ExecuteResultStatue.Complate, statue); Assert.IsTrue(new FileInfo(filepath).Length > 0); File.Delete(filepath); imgurl += '1'; statue = helper.Download(imgurl, filepath); Assert.AreEqual(ExecuteResultStatue.NotFound404, statue); Assert.AreEqual(false, File.Exists(filepath)); }