从源头杜绝Ajax上传垃圾文件

表单数据与文件上传异步提交,富文本编辑器图片上传(删除时只删除标签),都会产生垃圾文件。相信为此头疼的同学不在少数,网上查,有一些解决方案,但都只是减少了,并未彻底回收。


我不关心它是怎么来的,我只关心它是怎么没的。

我的解决方案:

异步文件上传流程

上传文件控制表

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='上传文件表';

流程一看就很清楚,说几个关键点:

  1. trans_id,如果新表单,新上传的文件,trans_id参数保证唯一性就可以了,方法很多,请自由发挥;如果是编辑状态,需要根据表名及表主键id查找旧的trans_id,这样才能对历史数据进行编辑。
  2. 文件列表,因为文件上传唯一能标识此文件的,只有相对路径,也就是存储在数据表中的路径字符串,所以每次表单提交时,需要服务器端表单处理的代码把表单中的文件列表收集出来,提交给回调地址。
  3. 回调时查相同trans_id,不在表单提交的文件列表中的记录,标识为未使用(is_used=0),在文件列表中的标识为使用(is_used=1)。
  4. 定期删除表中未使用文件及记录。
  5. 文件上传地址统一,富文本编辑器或者其它异步上传插件都用统一文件上传地址,统一控制。

操作看起来繁琐,但能从源头解决垃圾文件问题。
如果还有其它简便方法,欢迎评论建议。
[源码(PHP版本)]https://github.com/mydevc/uploadfile

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容