我想在服务器发生异常时候获取文件信息,然后删除掉上传的文件@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一样,不是什么都往里放,不然有时反而会麻烦