我正在获取客户端上传的文件,我通过以下路线收到该文件:
app.post('/upload', function(req, res){
var file = req.files.file;
//Process file inline
funcs.Process(file, req).then((data)=>{
//res.setHeader('Content-Length', stat.size);
res.setHeader('Content-Type', 'text/plain');
res.setHeader('Content-Disposition', 'attachment; filename=output.txt');
res.write(data, 'binary');
res.end();
}).catch((err)=>{
res.redirect('/?err='+err);
});
});
这是funcs.Process
的代码:
Process: function(file, req){
return new Promise(function(resolve, reject){
var lineReader = require('readline').createInterface({
input: fs.createReadStream(file)
});
var output = "";
lineReader.on('line', function (line) {
//some checks
ProcessLine(line).then((data)=>{
output += data + "\n";
}).catch((err)=>{
reject(`Invalid line in file [${line}].`);
});
});
lineReader.on('close', () => {
resolve(output);
});
});
但是,我收到以下错误:
TypeError: path must be a string or Buffer,
由readline生成输入:fs.createReadStream(file)
由于这是一个上传的文件,我如何在readline createInterface
中使用它?
最佳答案
createReadStream接受字符串路径。
你正在通过它req.files.file
,即 file object创建者 express-fileupload
.
您有两个选择:
使用
mv
函数 (req.files.file.mv('<path>', callbackFunc)
) 首先将文件移动到服务器上的已知路径。然后将此已知路径传递给fs.createReadStream
。直接从
req.files.file.data
中公开的文件数据缓冲区创建读取流使用streamifier或类似的库。
var fileStream = require('streamifier').createReadStream(req.files.file.data)
然后可以将该流传递给 readline
直接作为输入。
关于javascript - NodeJS 使用 readline 处理上传的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50181629/