Busboy和GridFS不会将文件保存到文件系统

在调用以下POST API时,应将文件保存到文件系统。 但是,该文件不被保存。 我可以在控制台中看到该文件,但无法保存/写入。 我有以下代码:

router.post('/notes', function(req, res, next) { var gfsstream, startFileWrite, endFileWriteTime; var busboy = new Busboy({ headers: req.headers }); busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { startFileWrite = new Date().getTime(); console.log('File [' + fieldname + ']: filename: ' + filename); gfsstream = gfs.createWriteStream('/uploads'); file.on('data', function(data) { gfsstream.write(data); }); file.on('end', function() { gfsstream.end(); req.pipe(gfsstream); }); gfsstream.on('close', function (file) { // do something with `file` endFileWrite = new Date().getTime(); console.log('File [' + fieldname + '] Finished'); console.log("Time needed: " + (endFileWrite - startFileWrite) + " ms"); }); }); busboy.on('error', function(err) { console.error(err); res.sendStatus(500, 'ERROR', err); }); busboy.on('finish', function end() { res.sendStatus(200); }); req.pipe(busboy); }); 

req.pipe(gfsstream)可能是这里的问题,但我不知道是什么阻止文件被保存。

只要做file.pipe(gfsstream)并使用finish事件,而不是close事件:

 busboy.on('file', function(fieldname, file, filename, encoding, mimetype) { startFileWrite = new Date().getTime(); console.log('File [' + fieldname + ']: filename: ' + filename); gfsstream = gfs.createWriteStream('/uploads'); file.pipe(gfsstream).on('finish', function() { endFileWrite = new Date().getTime(); console.log('File [' + fieldname + '] Finished'); console.log("Time needed: " + (endFileWrite - startFileWrite) + " ms"); }); });