- protected void btndeleteTask_Click(object sender, EventArgs e)
- {
-
- //获取标识为已删除数据,一次加载500条
- int countlocks = _goodsItemsApplication.CountAllNeedExecuteTask();
- int totalPagelocks = (countlocks + 500 - 1) / 500;
- //分批次处理
- for (int curentpage = 1; curentpage <= totalPagelocks; curentpage++)
- {
- var listItems = _goodsItemsApplication.GetPageAllNeedExecuteTask(500, true);
- foreach (var item in listItems)
- {
- //获取所有图片路径
- string[] pathlist = GetAllImagePathsByGoodId(item.ToString());
- foreach (var temp in pathlist)
- {
- //删除IIS服务器上的文件
- DeleteFilesFromServer(temp);
- //删除远程阿里云OSS对象存储上的文件
- DeleteFilesFromRemoteServer(temp);
- }
- //删除相关表的数据逻辑代码就不贴上来,业务逻辑有点多,根据自己的业务自行发挥
- }
- }
- }
-
- ///
- /// 获取到所有的图片文件路径
- ///
- ///
- ///
- private string[] GetAllImagePathsByGoodId(string goodid)
- {
- string[] arrayList = null;
- var goodsitem = _goodsItemsApplication.GetGoodsItemsInfoById(goodid);
- //商品主图
- var mainimgs = _goodsImgApplication.GetImgListByGoodsId(goodid);
- foreach (var tempimg in mainimgs)
- {
- arrayList.AddRange(tempimg.showimg);
- //删除数据库中商品主图记录
- _goodsImgApplication.DelImgById(tempimg.Id.ToString());
- }
- //中图
- arrayList.AddRange(goodsitem.medium_img);
- //小图
- arrayList.AddRange(goodsitem.small_img);
- //详情图
- var strArray = GetHtmlImageUrlList(goodsitem.description);
- foreach (var imgurl in strArray)
- {
- arrayList.AddRange(imgurl);
- }
-
- return arrayList;
- }
-
- ///
- /// 服务器上删除站点文件
- ///
- private void DeleteFilesFromServer(string path)
- {
- //获取全局配置信息
- var siteConfig = _dataCacheManager.GetConfigSiteGlobal();
- //特殊处理路径不包含goods字符串时,文件路径=服务器上静态文件目录+图片存储相对路径
- if (!path.Contains("goods"))
- {
- path = siteConfig.relay_static_path + path;
- }
- //获取文件所处的绝对路径
- string filepath = Commons.GetMapPath(path);
- //判断路径是否存在
- if (Directory.Exists(filepath))
- {
- //删除文件
- File.Delete(path);
- }
- }
- ///
- /// 远程服务器删除文件
- ///
- private void DeleteFilesFromRemoteServer(string path)
- {
- //获取全局配置信息
- var siteConfig = _dataCacheManager.GetConfigSiteGlobal();
- //初始化阿里云Oss客户端
- AlicloudOssClient ossClient = new AlicloudOssClient(
- new Uri(siteConfig.remote_oss_host),
- siteConfig.remote_oss_accesskey,
- siteConfig.remote_oss_accesssecret);
- //对象存储服务空间名称
- ossClient.bucketName = siteConfig.remote_oss_bucketname;
- //传入路径参数必须把路径的首个斜杠替换掉,否则阿里云Oss对象存储不识别,正确传参格式:123/123.jpg(说明:/123/123.jpg不识别)
- ossClient.DeleteObject(path.Substring(path.IndexOf("/") + 1));
-
- }
- ///
- /// 取得HTML中所有图片的 URL。
- ///
- /// HTML代码
- ///
图片的URL列表 - private static string[] GetHtmlImageUrlList(string sHtmlText)
- {
- // 定义正则表达式用来匹配 img 标签
- Regex regImg = new Regex(@"
]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>" , RegexOptions.IgnoreCase); - // 搜索匹配的字符串
- MatchCollection matches = regImg.Matches(sHtmlText);
- int i = 0;
- string[] sUrlList = new string[matches.Count];
- // 取得匹配项列表
- foreach (Match match in matches)
- sUrlList[i++] = match.Groups["imgUrl"].Value.Substring(match.Groups["imgUrl"].Value.IndexOf('/', match.Groups["imgUrl"].Value.IndexOf("/") + 2));
-
- return sUrlList;
- }
如果代码对您有帮助,请一键三连,支持原创,感谢老铁们的支持。