从源头杜绝Ajax上传垃圾文件
2019-03-26 本文已影响1人
wolf_43b9
表单数据与文件上传异步提交,富文本编辑器图片上传(删除时只删除标签),都会产生垃圾文件。相信为此头疼的同学不在少数,网上查,有一些解决方案,但都只是减少了,并未彻底回收。
我不关心它是怎么来的,我只关心它是怎么没的。
我的解决方案:
异步文件上传流程
上传文件控制表
CREATE TABLE `upload_file` (
`id` int(10) NOT NULL,
`path` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '文件相对路径',
`is_used` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0:未使用,1:使用',
`table_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '使用该文件的表名',
`table_id` int(10) UNSIGNED DEFAULT NULL COMMENT '使用该文件的表主键id',
`trans_id` varchar(100) NOT NULL COMMENT '传输id,图片与数据匹配用',
`created_at` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='上传文件表';
流程一看就很清楚,说几个关键点:
- trans_id,如果新表单,新上传的文件,trans_id参数保证唯一性就可以了,方法很多,请自由发挥;如果是编辑状态,需要根据表名及表主键id查找旧的trans_id,这样才能对历史数据进行编辑。
- 文件列表,因为文件上传唯一能标识此文件的,只有相对路径,也就是存储在数据表中的路径字符串,所以每次表单提交时,需要服务器端表单处理的代码把表单中的文件列表收集出来,提交给回调地址。
- 回调时查相同trans_id,不在表单提交的文件列表中的记录,标识为未使用(is_used=0),在文件列表中的标识为使用(is_used=1)。
- 定期删除表中未使用文件及记录。
- 文件上传地址统一,富文本编辑器或者其它异步上传插件都用统一文件上传地址,统一控制。
操作看起来繁琐,但能从源头解决垃圾文件问题。
如果还有其它简便方法,欢迎评论建议。
[源码(PHP版本)]https://github.com/mydevc/uploadfile