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;}
如果代码对您有帮助,请一键三连,支持原创,感谢老铁们的支持。
相关文章:
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 …...
Vue3+Element-plus+setup使用vuemap/vue-amap实现高德地图API相关操作
首先要下载依赖并且引入 npm安装 // 安装核心库 npm install vuemap/vue-amap --save// 安装loca库 npm install vuemap/vue-amap-loca --save// 安装扩展库 npm install vuemap/vue-amap-extra --save cdn <script src"https://cdn.jsdelivr.net/npm/vuemap/vue-a…...
Windows配置开机直达桌面并跳过锁屏登录界面在 Windows 10 中添加在启动时自动运行的应用
目录 Win10开机直达桌面并跳过锁屏登录界面修改组策略修改注册表跳过登录界面 在 Windows 10 中添加在启动时自动运行的应用设置系统级别服务一、Windows下使用sc将应用程序设置为系统服务1. 什么是sc命令?2. sc命令的基本语法3. 创建Windows服务的步骤与示例创建服…...
pythonUI自动化007::pytest的组成以及运行
pytest组成: 测试模块:以“test”开头或结尾的py文件 测试用例:在测试模块里或测试类里,名称符合test_xxx函数或者示例函数。 测试类:测试模块里面命名符合Test_xxx的类 函数级: import pytestclass Test…...
开放式耳机哪个品牌好用又实惠?五大口碑精品分享
如今开放式耳机市场日益火爆,不少知名品牌都在对产品进行升级迭代,那么如何在一众品牌型号中选择到自己最满意的那一款呢?开放式耳机哪个品牌好用又实惠?这就需要更专业的选购攻略,因此笔者专门整理出了专业机构的开放…...
代码随想录算法训练营day39||动态规划07:多重背包+打家劫舍
多重背包理论 描述: 有N种物品和一个容量为V 的背包。 第i种物品最多有Mi件可用,每件耗费的空间是Ci ,价值是Wi 。 求解将哪些物品装入背包可使这些物品的耗费的空间 总和不超过背包容量,且价值总和最大。 本质: …...
WebSocket革新:用PHP实现实时Web通信
标题:WebSocket革新:用PHP实现实时Web通信 在现代Web应用中,实时通信是一个不可或缺的功能。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,它允许服务器主动向客户端推送数据,极大地简化了客户端和服务器之…...
Python教程(十三):常用内置模块详解
目录 专栏列表1. os 模块2. sys 模块3. re 模块4. json 模块5. datetime 模块6. math 模块7. random 模块8. collections 模块9. itertools 模块10. threading 模块11. 加密 模块 总结 专栏列表 Python教程(十):面向对象编程(OOP…...
Linux 下的进程状态
文章目录 一、运行状态运行队列运行状态和运行队列 二、睡眠状态S状态D状态D状态产生的原因 三、暂停状态T状态t 状态 四、僵尸状态为什么有僵尸状态孤儿进程 一、运行状态 R状态:进程已经准备好随时被调度了。 运行队列 每个 CPU 都会维护一个自己的运行队列&am…...
【设计模式】六大基本原则
文章目录 开闭原则里氏替换原则依赖倒置原则单一职责原则接口隔离原则迪米特原则总结 开闭原则 核心就一句话:对扩展开放,对修改关闭。 针对的目标可以是语言层面的类、接口、方法,也可以是系统层面的功能、模块。当需求有变化的时候&#…...
Selenium网页的滚动
网页滚动功能实现 网页的滚动 如果需要对网页进行滑动操作,可以借助浏览器对象调用execute_script()方法来执行js语句,从而实现网页中的滚动下滑操作。 使用js语法实现网页滚动: # 根据x轴和y轴的值来定向滚动对应数值的距离 window.scrol…...
图算法系列1: 图算法的分类有哪些?(上)
大约在公元9世纪上半叶,来自中亚古国花剌子模的波斯数学家花剌子米(al-Khwarizmi)先后出版了两本对数学界有深远影响的书籍《印度数字算术》与《代数学》,前者在12世纪被翻译为拉丁文传入欧洲,十进制也因此传入欧洲,最终所形成的…...
零样本学习——从多语言语料库数据中对未学习语言进行语音识别的创新技术
引言 在全球众多的语言中,只有极少数的语言在语音识别领域取得了显著的进展。这种不平衡现象的主要原因是,现有的语音识别模型往往依赖于大量的标注语音数据,而这些数据对于许多语言来说难以获得。 近年来,尽管语音识别技术取得…...
ViewStub的原理
**ViewStub是Android开发中的一个轻量级控件,主要用于懒加载布局以提高应用程序的性能和响应速度。**其原理和工作方式如下: 定义与特点 轻量级与不可见:ViewStub是一个不可见的、不占布局位置的轻量级View,它在初始化时不会实例…...
十一、Spring AOP
十一、Spring AOP 1. AOP概述2. Spring AOP快速⼊⻔2.1 引⼊AOP依赖2.2 编写AOP程序 3. Spring AOP 详解3.1 Spring AOP核⼼概念3.1.1 切点(Pointcut) Around 哪个包3.1.2 连接点(Join Point) 包下面的方法3.1.3 通知(Advice) 就是要执行的方法3.1.4 切⾯(Aspect) 3.2 通知类型…...
【网络】IP的路径选择——路由控制
目录 路由控制表 默认路由 主机路由 本地环回地址 路由控制表的聚合 网络分层 个人主页:东洛的克莱斯韦克-CSDN博客 路由控制表 在数据通信中,IP地址作为网络层的标识,用于指定数据包的目标位置。然而,仅有IP地址并不足以确…...
Unity动画模块 之 2D IK(反向动力学)
本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正 1.什么是IK 反向动力学 IK(Inverse Kinematics)是一种方法,可以根据某些子关节的最…...
关于kickstart自动安装脚本以及dhcp的设置
我将在rhel7.9内进行本次实验,需要安装并启动图形界面 hostnamectl查看是否有图形界面 没有的话 可以使用yum group list 查看,并安装server with GUI yum group install "server with GUI" -y安装完成后可以使用init 5启动 安装kickstart自…...
AWS云服务器选择最佳区域
2024年,随着全球云计算的持续发展和AWS在全球不断扩展的数据中心网络,选择合适的AWS云服务器区域成为了企业和开发者需要认真考虑的问题。九河云告诉你在做出选择之前,需要考虑以哪些关键因素: 地理位置和用户分布 选择AWS云服务…...
Unity Android端截图保存并获取展示
截屏保存方法 public static IEnumerator ScreenShot(string filePath, string fileName){yield return new WaitForEndOfFrame();Rect rect new Rect(0, 0, Screen.width, Screen.height);Texture2D screenShot new Texture2D(Screen.width, Screen.height, TextureFormat.R…...
编程中输入特殊字符的通用方法
编程里的特殊字符(比如 # $ % ^ & * / \ < > " 等)分两种场景:直接键盘输入(写代码最常用)、代码里输出 / 转义(程序运行时显示),我给你整理了最简单、全覆盖的用法…...
百川2-13B-4bits极限测试:OpenClaw连续72小时压力运行报告
百川2-13B-4bits极限测试:OpenClaw连续72小时压力运行报告 1. 为什么要做这次压力测试 去年冬天第一次接触OpenClaw时,我就被它"本地化AI智能体"的定位吸引。但真正让我产生深度测试想法的,是上个月处理客户数据时遭遇的尴尬——…...
ESP32轻量事件驱动库simia_embedded:静态类型+环形缓冲区实现
1. 项目概述simia_embedded是一个面向 ESP32 平台 Arduino Core 的极简事件驱动(Event-Driven)轻量级库。其设计哲学遵循“够用即止”原则,不依赖 RTOS 抽象层、不引入动态内存分配、不封装硬件外设驱动,仅提供一套确定性高、开销…...
IGBT驱动电路设计避坑指南:从选型到PCB布局的8个关键点
IGBT驱动电路设计避坑指南:从选型到PCB布局的8个关键点 在电力电子领域,IGBT驱动电路的设计质量直接决定了整个系统的可靠性和效率。我曾亲眼见过一个价值百万的变频器项目,因为驱动电阻选型不当导致批量烧毁,团队不得不连续加班三…...
智能对话式开发:通过快马平台AI模型将你的想法直接变为cloud code应用
智能对话式开发:通过快马平台AI模型将你的想法直接变为cloud code应用 最近在尝试用AI辅助开发一个天气查询小工具,整个过程让我深刻体会到cloud code与AI结合的强大之处。传统开发需要自己写代码、调试、部署,而现在只需要用自然语言描述需…...
JAVA重点基础、进阶知识及易错点总结(34)注解基础(Annotation)
🚀 Java 巩固进阶 第 34 天 主题:注解基础(Annotation)—— 代码的"元数据"标签📅 进度概览:继设计模式之后,今天学习 Java 注解体系。注解是"代码的标签",是 …...
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳摘要卡尔・波普尔提出的可证伪性标准,被学界长期奉为科学与非科学的核心划界原则。该原则主张:一个命题若具备被经验事实反驳的逻辑可能,即可归入科学命题范畴。然而,…...
如何永久保存微信聊天记录?WeChatMsg开源工具终极指南
如何永久保存微信聊天记录?WeChatMsg开源工具终极指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeCha…...
百度网盘解析工具终极指南:3分钟告别下载限速困扰
百度网盘解析工具终极指南:3分钟告别下载限速困扰 【免费下载链接】baiduwp-php A tool to get the download link of the Baidu netdisk / 一个获取百度网盘分享链接下载地址的工具 项目地址: https://gitcode.com/gh_mirrors/ba/baiduwp-php 还在为百度网盘…...
从 ReAct 到 Workflow:基于云端 API 构建事件驱动的智能体
1. 什么是WorkFlow 之前咱们的用法是一种QueryEngine的用法,就是将大模型当成一个查询的工具在使用,而workflow是LlmaIndex的新一代编排引擎。 1.1 核心逻辑 LlamaIndex的workflow,本质上是一个事件驱动(Event-drivenÿ…...
