Sails.js船长:如何在上传过程中阅读上传的文件流?

时间:2015-09-30 11:12:31

标签: node.js file-upload sails.js skipper

我正在使用与船长捆绑的sails版本0.11进行文件上传。我需要上传至少100 MB以上的大文件。

现在,在我开始在服务器上进一步处理文件之前,我不希望文件上传完成。我想在上传时读取文件流。以下是我试图实现同样目标的方法:

var csv = require("fast-csv");

bulk: function (req, res){

  function parseEntry(entry){
    return entry
  } 

  var inputStream = req.file('employees');
  var csvStream = csv();
  inputStream.pipe(csvStream); 

  csvStream.on("data", function (data){
    count++
    // skip invalid records
    var parsedData = parseEntry(data);
    console.log(parsedData);
  });

  csvStream.on("end", function(){
    // console.log("total time taken in minutes:", timeTaken);
    return res.json(200, {"status": 1, "message": "successfully uploaded the file"});
  });

}

但我的日志只显示结束事件,并且没有捕获任何数据事件。我在文档中读到req.file("filename") 将返回文件流流。但是,如何访问我需要的特定文件流,因为我只上传了一个文件?

1 个答案:

答案 0 :(得分:2)

刚刚发布了skipper-csv;)

npm install skipper-csv --save

以与使用其他适配器相同的方式使用它。 它使用csv-parse来进行实际解析。您通常会将csv-parse选项传递给upload函数。另外,传递为每个已解析的行调用的rowHandler函数。如果您同时上载多个文件,也会传递fd(文件描述符)。这是一个例子:

req.file('files').upload({
  adapter: require('skipper-csv'),
  csvOptions: {delimiter: ',', columns: true},
  rowHandler: function(row, fd){
    console.log(fd, row);
  }
}, function (err, files) {
  if (err)
    return res.serverError(err);

  return res.json({
    message: "Uploaded " + files.length + " CSV files!",
    files: files
  });

});