2015-09-30 4 views
3

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

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

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") вернет поток файловых потоков. Но как мне получить доступ к конкретному файловому потоку, который мне нужен, поскольку я загружаю только один файл?

+0

Возможно потому, что пользователи Шкипер потоки 2, в то время как ваш cvsStream используя старый поток – securecurve

+0

стиль у меня точно такой же проблемой, вам удалось синтаксического анализа CSV как поток? – hammady

+0

nope. Мы не достигли ситуации, когда размер файла превышал несколько МБ. Если я вернусь к этой проблеме и когда-нибудь ее разрешу, я обязательно обновлю этот поток. –

ответ

2

Просто опубликовал 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 
    }); 

});