Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJS使用readline处理上载的文件_Javascript_Node.js - Fatal编程技术网

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);
        });

    });