I have the following middleware function
我有以下中间件功能
var bodyParser = require('body-parser'),
fs = require('fs');
module.exports = function(req, res, next) {
// Add paths to this array to allow binary uploads
var pathsAllowingBinaryBody = [
'/api2/information/upload',
'/api2/kpi/upload',
];
if (pathsAllowingBinaryBody.indexOf(req._parsedUrl.pathname) !== -1) {
var date = new Date();
req.filePath = "uploads/" + date.getTime() + "_" + date.getMilliseconds() + "_" + Math.floor(Math.random() * 1000000000) + "_" + parseInt(req.headers['content-length']);
var writeStream = fs.createWriteStream(req.filePath);
req.on('data', function(chunk) {
writeStream.write(chunk);
});
req.on('end', function() {
writeStream.end();
next();
});
} else {
bodyParser.json()(req, res, next);
}
};
The files is being transfered correctly however sadly the next()
in the
文件正在被正确地转移,然而不幸的是下一个()在
req.on('end', function() {
writeStream.end();
next();
});
is called before it is done writing all data to the new file.
在将所有数据写入新文件之前调用。
My question is what am i doing wrong? And how can i fix it?
我的问题是我做错了什么?我该如何修复它呢?
1 个解决方案
#1
4
Use the writable file stream's close
event to know when the file descriptor has been closed.
使用可写文件流的关闭事件来知道文件描述符何时被关闭。
Replace this:
替换:
var writeStream = fs.createWriteStream(req.filePath);
req.on('data', function(chunk) {
writeStream.write(chunk);
});
req.on('end', function() {
writeStream.end();
next();
});
with this:
用这个:
req.pipe(fs.createWriteStream(req.filePath)).on('close', next);
#1
4
Use the writable file stream's close
event to know when the file descriptor has been closed.
使用可写文件流的关闭事件来知道文件描述符何时被关闭。
Replace this:
替换:
var writeStream = fs.createWriteStream(req.filePath);
req.on('data', function(chunk) {
writeStream.write(chunk);
});
req.on('end', function() {
writeStream.end();
next();
});
with this:
用这个:
req.pipe(fs.createWriteStream(req.filePath)).on('close', next);