【问题标题】:Sails.js Skipper: How to read the uploaded file stream during upload?Sails.js Skipper:如何在上传过程中读取上传的文件流?
【发布时间】:2015-09-30 11:12:31
【问题描述】:

我使用的是 0.11 版的 Sails,它与船长捆绑在一起用于文件上传。我需要上传至少超过 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 用户流式传输 2,而您的 cvsStream 使用旧式流式传输
  • 我也有同样的问题,您是否设法将 csv 解析为流?
  • 不。我们没有达到文件大小超过几 MB 的情况。如果有一天我回到这个问题并解决它,我肯定会更新这个线程
  • 终于搞定了,刚写了skipper-csv模块,请关注github.com/hammady,我会尽快推送!

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


【解决方案1】:

刚刚发布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
  });

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多