javascript - 上传文件 Angular.js FormData

标签 javascript node.js angularjs

我正在使用 Angular 将文件上传到我的 Node 服务器。有时图像未上传,我在服务器端收到 req.files“未定义”,但我不明白为什么。我认为这与图像的重量无关:上传的图像约为 48KB,上传的图像不是 16KB。我附上了两张快照,以显示有效的一张快照和另一张快照(Chrome 开发者工具的网络选项卡)之间的时间差异(http post)。我可以看到“时间”(“阻止”、“发送”)在失败的时间中并没有重叠。也许这就是问题所在......但我不确定如何解决它。

Timing in the post of the one that is not uploaded

enter image description here

最佳答案

我明白了。

我在服务器端使用带有延迟选项“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/

相关文章:

javascript - ng-show 用于 ng-repeat 中的特定元素

angularjs - 按 ESC 时检测 $mdDialog 关闭

JavaScript:四舍五入到最接近的值

node.js - MongoDB 超时问题 (Node.js)

mysql - 如何在 NodeJS 的变量中存储 "count(*)"值?

javascript - 调试 domjs 和 highcharts

javascript - angular.copy 不复制具有子对象或数组的对象

javascript - 在javascript中找到嵌套数组中的最低值

javascript - Mapbox.js : Clear a custom legend?

javascript - 使用十进制精度和小数位数验证输入