Javascript NodeJS使用readline处理上载的文件
我得到了一个客户端上传的文件,我通过以下途径收到该文件:Javascript NodeJS使用readline处理上载的文件,javascript,node.js,Javascript,Node.js,我得到了一个客户端上传的文件,我通过以下途径收到该文件: 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(
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的代码:
但是,我得到以下错误:
TypeError:路径必须是字符串或缓冲区
由读线输入生成:fs.createReadStreamfile
由于这是一个上载的文件,如何在readline createInterface中使用它?接受字符串路径
您正在传递它req.files.file,它是由express fileupload创建的
您有两个选择:
使用mv函数req.files.file.mv、callbackFunc首先将文件移动到服务器上的已知路径。然后将此已知路径传递给fs.createReadStream
使用或类似的库直接从req.files.file.data中公开的文件数据缓冲区创建读取流
var fileStream=require'streamizer'.createReadStreamreq.files.file.data
然后可以将此流作为输入直接传递到readline。req.files.file是否有值或未定义?我在帖子上看不到任何验证。您是否使用此流进行文件上载处理?@WarleyNoleto是的,它有值。我测试了console.logreq.files.file,确实得到了内容。@Vasan我使用的是express fileupload
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);
});
});