示例#1
0
 /// <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);
                }
            }
        }