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


    1. protected void btndeleteTask_Click(object sender, EventArgs e)
    2. {
    3. //获取标识为已删除数据,一次加载500条
    4. int countlocks = _goodsItemsApplication.CountAllNeedExecuteTask();
    5. int totalPagelocks = (countlocks + 500 - 1) / 500;
    6. //分批次处理
    7. for (int curentpage = 1; curentpage <= totalPagelocks; curentpage++)
    8. {
    9. var listItems = _goodsItemsApplication.GetPageAllNeedExecuteTask(500, true);
    10. foreach (var item in listItems)
    11. {
    12. //获取所有图片路径
    13. string[] pathlist = GetAllImagePathsByGoodId(item.ToString());
    14. foreach (var temp in pathlist)
    15. {
    16. //删除IIS服务器上的文件
    17. DeleteFilesFromServer(temp);
    18. //删除远程阿里云OSS对象存储上的文件
    19. DeleteFilesFromRemoteServer(temp);
    20. }
    21. //删除相关表的数据逻辑代码就不贴上来,业务逻辑有点多,根据自己的业务自行发挥
    22. }
    23. }
    24. }

    1. ///
    2. /// 获取到所有的图片文件路径
    3. ///
    4. ///
    5. ///
    6. private string[] GetAllImagePathsByGoodId(string goodid)
    7. {
    8. string[] arrayList = null;
    9. var goodsitem = _goodsItemsApplication.GetGoodsItemsInfoById(goodid);
    10. //商品主图
    11. var mainimgs = _goodsImgApplication.GetImgListByGoodsId(goodid);
    12. foreach (var tempimg in mainimgs)
    13. {
    14. arrayList.AddRange(tempimg.showimg);
    15. //删除数据库中商品主图记录
    16. _goodsImgApplication.DelImgById(tempimg.Id.ToString());
    17. }
    18. //中图
    19. arrayList.AddRange(goodsitem.medium_img);
    20. //小图
    21. arrayList.AddRange(goodsitem.small_img);
    22. //详情图
    23. var strArray = GetHtmlImageUrlList(goodsitem.description);
    24. foreach (var imgurl in strArray)
    25. {
    26. arrayList.AddRange(imgurl);
    27. }
    28. return arrayList;
    29. }
    30. ///
    31. /// 服务器上删除站点文件
    32. ///
    33. private void DeleteFilesFromServer(string path)
    34. {
    35. //获取全局配置信息
    36. var siteConfig = _dataCacheManager.GetConfigSiteGlobal();
    37. //特殊处理路径不包含goods字符串时,文件路径=服务器上静态文件目录+图片存储相对路径
    38. if (!path.Contains("goods"))
    39. {
    40. path = siteConfig.relay_static_path + path;
    41. }
    42. //获取文件所处的绝对路径
    43. string filepath = Commons.GetMapPath(path);
    44. //判断路径是否存在
    45. if (Directory.Exists(filepath))
    46. {
    47. //删除文件
    48. File.Delete(path);
    49. }
    50. }
    51. ///
    52. /// 远程服务器删除文件
    53. ///
    54. private void DeleteFilesFromRemoteServer(string path)
    55. {
    56. //获取全局配置信息
    57. var siteConfig = _dataCacheManager.GetConfigSiteGlobal();
    58. //初始化阿里云Oss客户端
    59. AlicloudOssClient ossClient = new AlicloudOssClient(
    60. new Uri(siteConfig.remote_oss_host),
    61. siteConfig.remote_oss_accesskey,
    62. siteConfig.remote_oss_accesssecret);
    63. //对象存储服务空间名称
    64. ossClient.bucketName = siteConfig.remote_oss_bucketname;
    65. //传入路径参数必须把路径的首个斜杠替换掉,否则阿里云Oss对象存储不识别,正确传参格式:123/123.jpg(说明:/123/123.jpg不识别)
    66. ossClient.DeleteObject(path.Substring(path.IndexOf("/") + 1));
    67. }
    68. ///
    69. /// 取得HTML中所有图片的 URL。
    70. ///
    71. /// HTML代码
    72. /// 图片的URL列表
    73. private static string[] GetHtmlImageUrlList(string sHtmlText)
    74. {
    75. // 定义正则表达式用来匹配 img 标签
    76. 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);
    77. // 搜索匹配的字符串
    78. MatchCollection matches = regImg.Matches(sHtmlText);
    79. int i = 0;
    80. string[] sUrlList = new string[matches.Count];
    81. // 取得匹配项列表
    82. foreach (Match match in matches)
    83. sUrlList[i++] = match.Groups["imgUrl"].Value.Substring(match.Groups["imgUrl"].Value.IndexOf('/', match.Groups["imgUrl"].Value.IndexOf("/") + 2));
    84. return sUrlList;
    85. }

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

  • 相关阅读:
    卖出看涨期权和买入看跌期权有什么区别?卖出看跌期权有什么用?
    Kubernetes集群部署
    分布式事务-TCC异常-空回滚
    Flink CDC (Mysql为例)
    Scala (一) --------- Scala 入门
    Eclipse的配置使用
    No spring.config.import property has been defined
    MyBatis——xml的优化及动态代理的实现
    Python编程实例-Python的隐藏特性
    利用ChatGPT提升测试工作效率——测试工程师的新利器(一)
  • 原文地址:https://blog.csdn.net/nndsb/article/details/141052166