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); } //删除相关表的数据逻辑代码就不贴上来,业务逻辑有点多,根据自己的业务自行发挥 } } }
/// <summary> /// 获取到所有的图片文件路径 /// </summary> /// <param name="goodid"></param> /// <returns></returns> 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; } /// <summary> /// 服务器上删除站点文件 /// </summary> 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); } } /// <summary> /// 远程服务器删除文件 /// </summary> 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)); } /// <summary> /// 取得HTML中所有图片的 URL。 /// </summary> /// <param name="sHtmlText">HTML代码</param> /// <returns>图片的URL列表</returns> private static string[] GetHtmlImageUrlList(string sHtmlText) { // 定义正则表达式用来匹配 img 标签 Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\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; }
如果代码对您有帮助,请一键三连,支持原创,感谢老铁们的支持。