阿里云OSS储存,利用存储过程批量查询ZBlog PHP文章中不存在的图片

原创  郑建华   2020-05-15   138人阅读  0 条评论

一、概述    


    上回说到想在阿里云OSS存储中,删除部分随机命名的文件,其中碰到了一个问题,官方未提供按时间排序的功能。详情见《 阿里云OSS,一个五年还未解决的问题!时间排序》。其实针对删除文件而言,即使处理了文件列表按时间排序的问题,也还有其他的问题。因为文件是随机命名的,我并不能知晓哪些图片是我文章中在使用的,哪些图片是需要删除的,仅仅根据时间排序,也不能够完全确定。所以,还需要找其他的方式。接下来,我就讲讲我是怎么处理的吧。


二、准备


1、ossbrowser浏览器 软件(阿里云官方提供的OSS浏览器)

下载地址:https://help.aliyun.com/document_detail/61872.html

2、Navicat Premium 12  数据库连接工具

下载地址:https://www.zjh336.cn/?id=270

3、宝塔面板《阿里云OSS 1.2》插件


三、开始


1、在桌面创建一个excel文件,命名随意。如图在第一行添加四列,分别是name,fileSize,updatetime,operate

image.png

2、打开宝塔面板《阿里云OSS 1.2》插件,访问到图片存放目录

image.png

3、鼠标拖选全部内容,复制,如图(可先选中一部分,滚动到最后,再按shift选择全部)

image.png

4、先打开一个文本编辑器(notePad++,记事本均可)粘贴内容

image.png

5、再次选择文本编辑器中的全部内容,复制ctrl+s,再到excel中粘贴。(多做一步复制到文本编辑器中的目的是为了换行符能正常复制,直接在excel中粘贴可能不会换行)

image.png

6、打开Navicat,连接ZBlog的数据库

image.png

7、执行下列sql,创建如下数据表

CREATE TABLE `temp_img` (
  `name` varchar(255) DEFAULT NULL,
  `filesize` varchar(255) DEFAULT NULL,
  `updatetime` datetime DEFAULT NULL,
  `operate` varchar(255) DEFAULT NULL,
  `number` int(11) DEFAULT NULL,
  `id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8;

image.png

8、点击Navicat左上角文件,选择导入,选择Excel文件

image.png

9、选择文件,以及第一个Sheet表

image.png

10、填写字段名行,第一个数据行,最后一个数据行

image.png

11、直接下一步

image.png

image.png

12、选择追加,后期重复导入,可以选择追加或更新

image.png

13、点击开始,数据插入完成

image.png

image.png

14、创建如下存储过程

CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `dealwithImgCount`()
BEGIN
	DECLARE maxcount int;
	DECLARE v_id int;
	DECLARE img_name varchar(50);
	DECLARE num1 int DEFAULT 0;
	select min(id) into v_id from temp_img;
	select max(id) into maxcount from temp_img;
	
	REPEAT
			select name into img_name from temp_img where id=v_id;
			select sum(locate(img_name, p.log_Content)) into num1  from zbp_post p ;
      update temp_img set number=num1 where id=v_id;
			SET v_id = v_id+1;
    UNTIL v_id > maxcount END REPEAT;
END

image.png

15、运行存储过程,会需要些时间,请耐心等待

image.png

16、在此期间,可查询temp_img表。number值已经更新,此处number如果为0表示这个图片没有被使用,不为0,则说明有文章在使用该图片。

image.png

17、一千条数据,耗时146S,处理完成

image.png

18、执行如下sql,获取需要删除的图片列表

SELECT * FROM `temp_img` where number=0 order by name;

image.png

19、打开OSS Browser浏览器,根据图片名称搜索图片,再做删除操作吧。

image.png


四、结语

    这样就大功告成了,所以说,办法总比问题多,只要花时间研究,就有希望解决问题。MYSQL存储过程没写过,现场学。带着目的学东西,还是很快的。解决问题的这个过程,真的很享受!!

本文地址:https://www.zjh336.cn/?id=1780
版权声明:本文为原创文章,版权归 郑建华 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?