javascript - NodeJS 使用 readline 处理上传的文件

标签 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('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 .

您有两个选择:

  1. 使用 mv函数 ( req.files.file.mv('<path>', callbackFunc) ) 首先将文件移动到服务器上的已知路径。然后将此已知路径传递给 fs.createReadStream

  2. 直接从 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/

相关文章:

node.js - AWS Simple Queue Service (SQS) 可见性超时 - 设置最大重试次数?

node.js - npm install 返回 syscall spawn git 错误

javascript - 如何将带有静态 Assets 的 React 组件发布到 npm?

javascript - Ember.js:如何跟踪延迟操作运行时错误?

javascript - 匿名函数声明简写javascript

javascript - 使用数组创建状态下拉菜单

javascript - 在 JavaScript 中将一个数组附加到另​​一个数组

mysql - Knex 事务 - 使用等待 - 不执行第二个 SQL 语句

node.js - 使用 Azure Mobile Apps for Node 在 Cosmos DB 上执行 SQL 查询联接

javascript - getBoundingClientRect() 导致 javascript 崩溃?