Node.js服务器没有收到来自angular site的上传请求(使用express-fileupload)

我创build了一个使用express-fileupload来接收多部分/表单数据上传的node.js Web服务器,我似乎无法得到它正确的艰难,这里是我的节点部分:

app.post('/uploadImage', function(req, res) { console.log("uploadImage"); if (!req.files) return res.status(400).send('No files were uploaded.'); let uploadedFile = req.files.uploadedFile; if(uploadedFile.mimetype.indexOf("image") > -1){ // Use the mv() method to place the file somewhere on your server uploadedFile.mv('./' + uploadedFile.name, function(err) { if (err) return res.sendStatus(500); res.json({result: "uploaded successfully!"}); }); } }); 

HTML:

 <form id="uploadForm"> <div class="row" style="margin-left: 0; margin-right: 0"> <div class="text-center"> <img [src]="imgPath" class="img-responsive text-center" style="max-height: 75px"/> <input id="artUpload" type="file" class="btn-success text-center" name="uploaded_file.png"/> <button class="btn btn-primary" (click)="upload()">Upload</button> </div> </div> </form> 

和打字稿:

 upload(){ let formData: FormData; formData = new FormData(<HTMLFormElement>document.getElementById('uploadForm')); let input: HTMLInputElement = <HTMLInputElement>document.getElementById('artUpload'); formData.set('uploadedimage', input.files.item(0),'uploadedimage.png'); server.sendForm(formdata); } 

传递给server.sendForm方法的对象不包含任何文件。 “uploadedimage”键在login控制台时也不显示。 如果您使用express-fileupload npm站点上提供的stock html,这将起作用。

没有使用express-fileupload ,我直接使用connect-busboy

前端方面

html template

 <div> <form> <div class="form-group"><label for="upload">Fichier</label> <input id="upload" type="file" (change)="changeListener($event)"/> </div> </form> </div> 

component.ts

 changeListener($event): void { console.log('change listener'); this.readThis($event.target); } readThis(inputValue: any): void { const file: File = inputValue.files[0]; this.filename = file.name; const fileExtension: string = this.filename.substr((this.filename.lastIndexOf('.') + 1)); // read the extension of the file this.appService.deployement(file); } 

service angular

 deployement(file: File) { console.log('service angular'); const formData: FormData = new FormData(); formData.append('file', file, file.name); const headers = new Headers(); headers.append('Content-Type', 'multipart/*'); // headers.append('Accept', 'application/json'); this.http.post(URL_API_REST + 'upload', formData, headers) .toPromise() .then(res => res.json()) } 

服务器端

app.js

 var fs = require('fs'); var busboy = require('connect-busboy'); ... app.post('/upload', function(req, res) { console.log("upload"); if (req.method === 'GET') return res.json({'status': 'GET not allowed'}); var fstream; req.pipe(req.busboy); req.busboy.on('file', function (fieldname, file, filename) { console.log("Uploading: " + filename); fstream = fs.createWriteStream(__dirname + '/files/' + filename); file.pipe(fstream); fstream.on('close', function () { res.sendStatus(200); }); }); }); 

只确保在应用程序的服务器主目录中创build了目录files ,否则在运行服务器时会出现错误。