我一直在努力通过我正在构建的Angular2 / NodeJS应用程序将文件发送到我的后端API。我已经尝试了很多不同的东西和建议,似乎没有任何工作,我无法弄清楚为什么。首先,这是我的代码。
我的观看代码。
<input type='file' (change)='fileChangeEvents($event)' placeholder='Upload file...' />
<button (click)='upload()'>Upload Files</button>
我的控制器中的功能。我在这里调试过,文件上传过程在这里工作正常。 this._filesToUpload变量包含一个发送到服务的文件,所以问题不在这里。
fileChangeEvents(fileInput: any) {
this._filesToUpload = <Array<File>> fileInput.target.files;
}
upload() {
this._filesService.sendFile(routes.api.files, [], this._filesToUpload)
.subscribe((result) => {
console.log(result);
}, (error) => {
console.log(error);
});
}
现在,这是我的服务功能。正如您所看到的,我正在创建一个formDataObjct,将文件附加到它并尝试通过this._http函数将其发布到API:
sendFile(url: String, vars: Array<String>, files: File[]):Observable<any> {
let headers = HttpHelper.createAuthorizationHeader(true);
let options = new RequestOptions({ headers: headers });
let files = files;
const formData = new FormData();
for(var i = 0; i < files.length; i++){
formData.append(files[i].name, files[i]);
}
return this._http
.post(url, formData)
.map((res) => {
return res.json();
});
}
我有一个捕获此POST的NodeJS路由和函数但是当我在代码中添加断点时,该文件不在帖子中的任何位置。我已经检查了我的NodeJS路由文件中的req变量,并且文件存在的地方无处可去。我本来以为它会出现在req.body或req.files中,但没有任何内容:
router.post('/upload', function(req, res, next) {
filesRoutesControllerObjectInstance.upload(req, res, next);
});
我也尝试过使用XHR请求的解决方案(不使用Angular2&#39的http对象),但这也无法正常工作。
当我使用POSTMAN发送文件时,我在我的NodeJS路由中捕获请求,并且该文件位于req.body属性中,这非常奇怪。这会告诉我,我的Angular2功能不正确。谁能看到这里出了什么问题?