Sails.js Skipper: Как прочитать поток загруженных файлов во время загрузки?

Я использую паруса версии 0.11, которая поставляется в комплекте с шкипером для загрузки файлов. Мне нужно загрузить как минимум большие файлы размером более 100 МБ.

Теперь я не хочу, чтобы загрузка файла была завершена до начала дальнейшей обработки файла на сервере. Я хочу прочитать поток файла, пока он загружается. Вот как я пытаюсь добиться того же:

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 ответ

Решение

Только что опубликовал шкипер-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
  });

});
Другие вопросы по тегам