Angular2通过HTTP将文件发送到API

时间:2016-11-11 09:36:37

标签: file http post angular upload

我一直在努力通过我正在构建的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功能不正确。谁能看到这里出了什么问题?

0 个答案:

没有答案