当前位置: 首页 > news >正文

C# 根据MySQL数据库中数据,批量删除OSS上的垃圾文件

 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;}

如果代码对您有帮助,请一键三连支持原创,感谢老铁们的支持。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux(离线)内网部署 thingsboard-gateway 网关实战modbus通讯
  • 【docker快捷部署系列二】用docker-compose快速配置多个容器,docker部署Springboot+Vue项目和mysql数据库
  • Python | Leetcode Python题解之第329题矩阵中的最长递增路径
  • 手写Redis缓存系统,第三章:持久化-增加可靠性
  • SuccBI+低代码文档中心 — 可视化分析(仪表板)(下)
  • Linux-Shell入门-05
  • 白骑士的Matlab教学实战项目篇 4.3 控制系统设计
  • 保研考研机试攻略:第一章——从零开始
  • 怎样才算精通 Excel?
  • linux之网络子系统-GRO机制分析
  • 09正弦稳态电路的分析
  • C语言学习笔记 Day10(指针--中)
  • 13.StringRedisTemplete使用
  • 巧用Array.forEach:简化循环与增强代码可读性;Array.forEach怎么用;面对大量数据时怎么提高Array.forEach的性能
  • C语言:字符函数,字符串函数
  • SegmentFault for Android 3.0 发布
  • Android系统模拟器绘制实现概述
  • bearychat的java client
  • IndexedDB
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java多线程(4):使用线程池执行定时任务
  • js ES6 求数组的交集,并集,还有差集
  • Mithril.js 入门介绍
  • MySQL QA
  • PHP 小技巧
  • PHP面试之三:MySQL数据库
  • Python - 闭包Closure
  • RxJS: 简单入门
  • windows下使用nginx调试简介
  • 基于axios的vue插件,让http请求更简单
  • 力扣(LeetCode)357
  • 软件开发学习的5大技巧,你知道吗?
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 追踪解析 FutureTask 源码
  • MPAndroidChart 教程:Y轴 YAxis
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $refs 、$nextTic、动态组件、name的使用
  • (7)svelte 教程: Props(属性)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (LeetCode) T14. Longest Common Prefix
  • (NSDate) 时间 (time )比较
  • (Qt) 默认QtWidget应用包含什么?
  • (二)构建dubbo分布式平台-平台功能导图
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .NET Core 中的路径问题
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net IOC框架入门之一 Unity
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET委托:一个关于C#的睡前故事
  • [100天算法】-每个元音包含偶数次的最长子字符串(day 53)
  • [BZOJ] 2044: 三维导弹拦截
  • [C/C++]数据结构 循环队列