node.js - Sails.js 船长 : How to read the uploaded file stream during upload?

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

我正在使用 sails 版本 0.11,它与 skipper 捆绑在一起用于文件上传。我至少需要上传超过 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") 将返回文件流流。但是,由于我只上传了一个文件,我该如何访问我需要的特定文件流呢?

最佳答案

刚刚发布skipper-csv ;)

npm install skipper-csv --save

像使用其他适配器一样使用它。 它使用 csv-parse做实际的解析。您通常将 csv-parse 选项传递给上传函数。此外,您还传递了为每个已解析的行调用的 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
  });

});

关于node.js - Sails.js 船长 : How to read the uploaded file stream during upload?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32864625/

相关文章:

sails.js - Sailsjs 覆盖一个模型的蓝图方法

javascript - Sinon clock.tick 不会提前 setTimeout 的时间

html - 使用 HTML5 File API 设置带有文件的输入文件元素

ios 使用 HTTP POST 上传图像和文本

javascript - sailsjs + ext-direct (sencha extjs)

node.js - Azure Node 托管文件/文件夹权限

node.js - 发布或部署 Nodejs 项目到构建文件夹或 FTP

json - 如果 URL 是动态的,如何将 Node.js 应用程序部署到 Heroku

javascript - Node.js 中不存在的行上的隐形神话意外 token

java - 在Java中获取文件的编码