/// <summary> /// 先把需要更新的文件下载到本地,并且解压 /// </summary> /// <param name="url"></param> /// <returns></returns> private bool update_downloadAndUnZipFile(string url, string tagetpath) { try { String onlyFileName = Path.GetFileName(url); //下载 bool falg = FtpUpLoadFiles.Download(url, tagetpath, onlyFileName); if (!falg) { yoyoConst.WriteLog("文件下载失败" + url); } //TODO解压 string name = tagetpath + onlyFileName; falg = update_Unzip(name, tagetpath); if (falg) { bool del = true; while (del) { try { File.Delete(name);//解压后删除 del = false; } catch { Thread.Sleep(200); } } } return(falg); } catch (Exception ex) { LogisTrac.WriteLog(ex.Message); return(false); } }
/// <summary> /// 处理新上传的图片资源 /// </summary> /// <param name="idList"></param> public async Task DealNewResourceAsync(List <long> idList) { if (idList.Count < 1) { return; } var resourceList = _dataAccess.GetDailyStoryResourceModelsById(idList); if (resourceList.Count < 1) { return; } var dictServer = new SysDicService(); var inUserService = new InuseKeyInfoService(); var dictList = dictServer.GetAllDict("FtpConfig"); if (dictList == null || dictList.Count < 1) { return; } var ftpUrl = dictList.FirstOrDefault(f => f.Lable == "FtpUrl")?.Value; var ftpUserName = dictList.FirstOrDefault(f => f.Lable == "FtpUserName")?.Value; var ftpPassword = dictList.FirstOrDefault(f => f.Lable == "FtpPassword")?.Value; var ftpViewPre = dictList.FirstOrDefault(f => f.Lable == "FtpViewPre")?.Value; var tinifyCodeList = dictServer.GetAllDict("TinifyKey")?.OrderBy(f => f.Sort).ToList(); if (tinifyCodeList == null || tinifyCodeList.Count < 1) { return; } var newTime = DateTime.Now; var tiniCodeUseLimit = 500; var inUseModel = inUserService.GetModels("TinifyKey", null, newTime.Year, newTime.Month)?.FirstOrDefault(f => f.UseCount < tiniCodeUseLimit); if (inUseModel == null || tinifyCodeList.All(f => f.Value != inUseModel.KeyInfo)) { inUseModel = new InusekeyinfoModel { CreateTime = newTime, IsDel = FlagEnum.HadZore, KeyInfo = tinifyCodeList[0].Value, KeyType = "TinifyKey", UseCount = 0, UseDate = newTime }; inUserService.SaveModel(inUseModel); if (inUseModel.Id < 1) { Console.WriteLine("保存失败"); return; } } foreach (var model in tinifyCodeList) { if (model.Value == inUseModel.KeyInfo) { model.IsDel = FlagEnum.HadOne.GetHashCode(); } } Tinify.Key = inUseModel.KeyInfo; var ftpServer = new FtpUpLoadFiles(ftpUrl, ftpUserName, ftpPassword); var allowExtensions = new List <string> { ".jpeg", ".png", ".jpg" }; foreach (var f in resourceList) { //压缩图片 if (string.IsNullOrEmpty(f.Url)) { continue; } var tempPath = HostingEnvironment.MapPath(f.Url); if (string.IsNullOrEmpty(tempPath)) { continue; } var fileExtension = Path.GetExtension(tempPath)?.ToLower(); if (fileExtension == null) { continue; } var sourceData = File.ReadAllBytes(tempPath); byte[] resultData = null; //判断文件扩展名是否能够进行压缩 var couldCompress = allowExtensions.Select(x => x.ToLower()).Contains(fileExtension); if (couldCompress) { try { resultData = await Tinify.FromBuffer(sourceData).ToBuffer(); } catch (Exception e) { Console.WriteLine(e); continue; } //该code已经用完了 if (Tinify.CompressionCount >= tiniCodeUseLimit) { //变更原有的状态 inUseModel.IsDel = FlagEnum.HadOne; inUseModel.UseCount = (int)Tinify.CompressionCount; inUserService.SaveModel(inUseModel); //重新生成 var tempKey = tinifyCodeList.FirstOrDefault(r => r.IsDel == FlagEnum.HadZore.GetHashCode()); if (tempKey == null) { continue; } tempKey.IsDel = FlagEnum.HadOne.GetHashCode(); inUseModel = new InusekeyinfoModel { CreateTime = newTime, IsDel = FlagEnum.HadZore, KeyInfo = tempKey.Value, KeyType = "TinifyKey", UseCount = 0, UseDate = newTime }; inUserService.SaveModel(inUseModel); } else { inUseModel.UseCount = (int)(Tinify.CompressionCount ?? 0); inUserService.SaveModel(inUseModel); } } //上传 var indexOfName = f.Url.LastIndexOf("/", StringComparison.Ordinal); if (indexOfName < 0) { continue; } var fileName = f.Url.Substring(indexOfName); var transferFinish = ftpServer.UploadFile("", couldCompress ? resultData : sourceData, fileName); if (transferFinish) { //上传完成 f.FullUrl = ftpViewPre + fileName; SaveModel(f); } } }