我将带有Angular的文件上传到我的节点服务器。有时图像没有上传,我得到req.files" undefined"在服务器端,我无法弄明白为什么。我认为这与图像的重量无关:上传的图像大约为48KB,而上传的图像不是16KB。我附上两个快照,以显示工作与另一个(Chrome开发人员工具的网络选项卡)之间的时间差异(http post)。我可以看到"次" ("阻止","发送")在失败的那个中没有重叠。也许是问题......但我不确定如何解决它。
答案 0 :(得分:1)
我明白了。
我在服务器端使用express.multipart,使用延迟选项“express.multipart({defer:true})”
正因为如此,有时执行到达了我管理post请求的代码,以便在express.multipart模块中的form“end”事件之前使用“req.files.file”获取图像,模块设置req。文件:
form.on('end', function(){
if (done) return;
try {
req.body = qs.parse(data);
**req.files = qs.parse(files);**
if (!options.defer) next();
} catch (err) {
form.emit('error', err);
}
});
所以有时候req.files.file = undefined,因为还没有设置......
摆脱{defer:true}选项解决了我的问题。与一个或另一个图像无关。
这里是express.multipart模块中“defers”选项的文档:
“推迟处理并将Formidable表单对象公开为req.form
。
* next()
被调用而不等待表单的“结束”事件。
*如果您需要绑定到“progress”事件,此选项很有用,例如。“