我正在使用 Angular 将文件上传到我的 Node 服务器。有时图像未上传,我在服务器端收到 req.files“未定义”,但我不明白为什么。我认为这与图像的重量无关:上传的图像约为 48KB,上传的图像不是 16KB。我附上了两张快照,以显示有效的一张快照和另一张快照(Chrome 开发者工具的网络选项卡)之间的时间差异(http post)。我可以看到“时间”(“阻止”、“发送”)在失败的时间中并没有重叠。也许这就是问题所在......但我不确定如何解决它。
最佳答案
我明白了。
我在服务器端使用带有延迟选项“express.multipart({defer: true})”的express.multipart
因此,有时执行会到达我管理 post 请求的代码,以在express.multipart 模块中的表单“end”事件触发之前使用“req.files.file”获取图像,其中模块设置了 req。文件:
form.on('end', function(){
如果(完成)返回;
尝试 {
req.body = qs.parse(data);
**req.files = qs.parse(files);**
if (!options.defer) next();
} 捕获(错误){
form.emit('错误', err);
}
});
所以有时 req.files.file = undefined,只是因为尚未设置...
摆脱 {defer: true} 选项解决了我的问题。与一张或另一张图像无关。
这是express.multipart模块中“defers”选项的文档:
“推迟处理并将 Formidable 表单对象公开为 req.form
。
* next()
的调用无需等待表单的“end”事件。
* 例如,如果您需要绑定(bind)到“进度”事件,则此选项非常有用。”
关于javascript - 上传文件 Angular.js FormData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26015246/