Angularjs 异步文件上传(使用FormData),在服务器端使用Node.JS Express和强大的
我想将文件异步上传到Node.JS Express 我对我的HTML和Javascript非常自信,因为在服务器端的ASP.NET中,我已经多次使用过它们 现在,我想在服务器端的Node.JS和Express中使用相同的客户端代码 HTML: 如何访问正在提交的文件?Angularjs 异步文件上传(使用FormData),在服务器端使用Node.JS Express和强大的,angularjs,node.js,formidable,Angularjs,Node.js,Formidable,我想将文件异步上传到Node.JS Express 我对我的HTML和Javascript非常自信,因为在服务器端的ASP.NET中,我已经多次使用过它们 现在,我想在服务器端的Node.JS和Express中使用相同的客户端代码 HTML: 如何访问正在提交的文件? 正如您所看到的,console.log(files.length)给了我未定义的您是否尝试将res.json()移动到表单.parse()的回调中?在解析请求数据之前,连接可能已关闭。哦,我将尝试。。。忽略了form.parse(
正如您所看到的,
console.log(files.length)
给了我未定义的您是否尝试将res.json()
移动到表单.parse()的回调中?在解析请求数据之前,连接可能已关闭。哦,我将尝试。。。忽略了form.parse()
是异步的这一事实!它抛出了undefined
,您设置“内容类型”:undefined
有什么原因吗?您应该检查console.dir(req.headers['content-type'])
的输出,并确保它显示multipart/form data
。
<form id="form">
<div class="form-group">
<label>XML files (1 or many)</label>
<input type="file" class="form-control" id="files" name="dummy" multiple ng-disabled="processing" accept=".xml" />
</div>
<div class="form-group">
<button class="btn btn-default" ng-click="process()" ng-disabled="processing">
<span ng-show="processing">Processing...</span>
<span ng-show="!processing">Convert</span>
</button>
</div>
</form>
$scope.process = function () {
$scope.processing = true;
var formData = new FormData();
for (var i = 0; i < document.getElementById('files').files.length; i++) {
formData.append('file' + i, document.getElementById('files').files[i]);
}
var httpRequest = $http({
method: 'post',
url: "/api/parser/parse",
data: formData,
params: {
},
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
});
httpRequest.success(function (response) {
$scope.response = response;
if (response.error) {
toaster.pop('error', response.message);
return;
}
toaster.pop('success', "", "Finished processing");
});
httpRequest['finally'](function () {
$scope.processing = false;
});
};
}]);
var express = require('express');
var formidable = require('formidable');
var _ = require('underscore');
var router = express.Router();
router.post('/parse', function(req, res, next) {
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
if (err) {
console.error(err.message);
return;
}
console.log(files.length); // Is outputting "undefined"
});
res.json({
error: false
});
});