美文网首页Java 杂谈PHP实战PHP经验分享
从源头杜绝Ajax上传垃圾文件

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

作者: wolf_43b9 | 来源:发表于2019-03-26 18:17 被阅读1次

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


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

    我的解决方案:

    异步文件上传流程

    上传文件控制表

    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

    相关文章

      网友评论

        本文标题:从源头杜绝Ajax上传垃圾文件

        本文链接:https://www.haomeiwen.com/subject/ggenvqtx.html