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

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

以下是一些可能用到的代码片段: 1. 从OSS获取Excel文件: ```java // 初始化OSS客户端 OSSClient ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 获取Excel文件流 OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); ``` 2. 解析Excel文件: ```java // 创建工作簿 Workbook workbook = WorkbookFactory.create(inputStream); // 获取第一个工作表 Sheet sheet = workbook.getSheetAt(0); // 遍历工作表的每一行 for (Row row : sheet) { // 获取每一行的每一个单元格 for (Cell cell : row) { // 处理单元格的数据 String value = cell.getStringCellValue(); // ... } } ``` 3. 连接MySQL数据库: ```java // 加载MySQL驱动程序 Class.forName("com.mysql.jdbc.Driver"); // 建立数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); ``` 4. 将数据插入MySQL数据库: ```java // 创建PreparedStatement对象 PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable (column1, column2, ...) VALUES (?, ?, ...)"); // 设置参数 pstmt.setString(1, value1); pstmt.setInt(2, value2); // ... // 执行SQL语句 pstmt.executeUpdate(); ``` 通过组合以上代码片段,您应该能够完成从OSS存储的Excel文件读取数据并将其导入MySQL数据库的任务。请注意,此代码仅提供了一些基本的代码片段,实际应用可能需要进行更多的空值检查、异常处理等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

战族狼魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值