美文网首页
2019-08-18 表单文件上传思路

2019-08-18 表单文件上传思路

作者: DreamNeverDie | 来源:发表于2019-08-18 22:40 被阅读0次

    我想在服务器发生异常时候获取文件信息,然后删除掉上传的文件@Blue@智能社
    Blue@智能社blue@zhinengshe.com 21:35:05
    @ltf 我猜,你是想在insert失败的时候把文件删掉对吧
    ltf(625663424) 21:35:20
    不,差不多

    好纠结。。。
    ltf(625663424) 21:35:49
    打错了
    就是老师的意思
    理论上是应该在convert(body())上能获取文件信息,但不知道代码怎么写上去
    ltf(625663424) 21:37:19
    难道自己要再写个专用的中间件上去吗
    Blue@智能社blue@zhinengshe.com 21:37:46
    不是的,这其实是个逻辑问题
    两种思路:
    1.文件上传都进临时目录,然后再移动到永久保存的位置,大概这个顺序
    body中间件...

    fs.rename()

    try{
    db.query('INSERT xxx');
    }catch(e){
    fs.unlink(xxx);
    }

    *注1:必须先rename再query,这样如果移动失败,query不会执行
    *注2:如果出现各种错误,文件会留在临时目录,定期清理临时目录就好

    2.文件直接上传到永久位置,然后插入文件
    body中间件...
    try{
    db.query('INSERT xxx');
    }catch(e){
    fs.unlink(xxx);
    }
    Blue@智能社blue@zhinengshe.com 21:38:51
    第一种方式其实反而简单一些
    比如用户放弃上传了之类的,临时目录里多了一些文件而已,影响不大
    Blue@智能社blue@zhinengshe.com 21:40:14
    这事儿的重点其实并不是用户提交表单的处理,而是用户压根不提交的问题
    ltf(625663424) 22:25:51
    @Blue@智能社 方式1,老师是不是假定,表单提交分成了两部分,图片和其他字段是独立的两次提交?
    ltf(625663424) 22:27:12
    第二次提交去关联之前提交的保存在临时目录的图片

    Blue@智能社blue@zhinengshe.com 22:27:42
    是的,因为一次性提交的非常好处理,所以给你说的是更麻烦的情况如何折腾
    ltf(625663424) 22:30:20
    那一般把提交到tmp的图片信息保存到哪里,以便让我下次总的提交后能找到,是session里面吗?
    Blue@智能社blue@zhinengshe.com 22:32:02
    你还记得咱们vue的时候讲过el-upload不,其实那时候给大家的就是这个套路
    并不存在session里,上传文件之后,把文件的标识符(一般也就是文件名)传给前台,前台真正提交数据的时候,会把这个标识符带过来,你根据这个来移动临时文件
    ltf(625663424) 22:33:46
    分步提交我记得,只是那时候只是介绍前台的
    原来如此
    Blue@智能社blue@zhinengshe.com 22:34:18
    恩,原理是一致的
    session是个坑,跟vuex一样,不是什么都往里放,不然有时反而会麻烦

    相关文章

      网友评论

          本文标题:2019-08-18 表单文件上传思路

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