一、概述
上回说到想在阿里云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
2、打开宝塔面板《阿里云OSS 1.2》插件,访问到图片存放目录
3、鼠标拖选全部内容,复制,如图(可先选中一部分,滚动到最后,再按shift选择全部)
4、先打开一个文本编辑器(notePad++,记事本均可)粘贴内容
5、再次选择文本编辑器中的全部内容,复制ctrl+s,再到excel中粘贴。(多做一步复制到文本编辑器中的目的是为了换行符能正常复制,直接在excel中粘贴可能不会换行)
6、打开Navicat,连接ZBlog的数据库
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;
8、点击Navicat左上角文件,选择导入,选择Excel文件
9、选择文件,以及第一个Sheet表
10、填写字段名行,第一个数据行,最后一个数据行
11、直接下一步
12、选择追加,后期重复导入,可以选择追加或更新
13、点击开始,数据插入完成
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
15、运行存储过程,会需要些时间,请耐心等待
16、在此期间,可查询temp_img表。number值已经更新,此处number如果为0表示这个图片没有被使用,不为0,则说明有文章在使用该图片。
17、一千条数据,耗时146S,处理完成
18、执行如下sql,获取需要删除的图片列表
SELECT * FROM `temp_img` where number=0 order by name;
19、打开OSS Browser浏览器,根据图片名称搜索图片,再做删除操作吧。
四、结语
这样就大功告成了,所以说,办法总比问题多,只要花时间研究,就有希望解决问题。MYSQL存储过程没写过,现场学。带着目的学东西,还是很快的。解决问题的这个过程,真的很享受!!
还没有评论,来说两句吧...