上传文件Angular.js FormData

时间:2014-09-24 11:01:19

标签: javascript node.js angularjs

我将带有Angular的文件上传到我的节点服务器。有时图像没有上传,我得到req.files" undefined"在服务器端,我无法弄明白为什么。我认为这与图像的重量无关:上传的图像大约为48KB,而上传的图像不是16KB。我附上两个快照,以显示工作与另一个(Chrome开发人员工具的网络选项卡)之间的时间差异(http post)。我可以看到"次" ("阻止","发送")在失败的那个中没有重叠。也许是问题......但我不确定如何解决它。

Timing in the post of the one that is not uploaded

enter image description here

1 个答案:

答案 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”事件,此选项很有用,例如。“