我正在尝试使用 node.js 作为后端和 angular.js 作为前端将文件上传到服务器。我为此使用 express 4 + busboy。我在前端有一个表格,我应该在其中显示我正在上传的所有文件。因此,如果我有 3 个文件并单击上传,则 angular 应将这些文件发布到 node.js 并在获得响应后,用这三个文件刷新表。这是我在 Angular 中使用的函数:
function uploadFiles(files){
var fd = new FormData();
for(var i = 0; i<files.length; i++){
fd.append("file", files[i]);
}
$http.post('http://localhost:3000/upload', fd, {
withCredentials: false,
headers: {'Content-Type': undefined },
transformRequest: angular.identity
}).success(refreshTable()).error(function(){
console.log("error uploading");
});
}
这是来自node.js:
app.post('/upload', function(req, res) {
var busboy = new Busboy({ headers: req.headers });
busboy.on('file', function (fieldname, file, filename) {
console.log("Uploading: " + filename);
var fstream = fs.createWriteStream('./files/' + filename);
file.pipe(fstream);
});
busboy.on('finish', function(){
res.writeHead(200, { 'Connection': 'close' });
res.end("");
});
return req.pipe(busboy);
});
问题是,如果我上传三个文件,一旦上传第一个文件,node.js 就会发送响应,因此表仅在上传的第一个文件时更新,如果我刷新页面,则会出现其余文件. 我认为问题在于节点中的这一行:return req.pipe(busboy); 如果我删除该行,则发布响应会保持等待很长时间并且没有任何反应,我认为这是一个异步问题,有人知道是否有办法仅在所有文件都上传后才发回响应?谢谢