Я пробовал две разные библиотеки: multer и formidable для обработки загрузки файлов в узел, и оба они используют 100% ЦП во время загрузки.
Это общая проблема узла? И как люди справляются с этим в среде с высокой степенью параллелизма?
Версия узла: v0.10.36
(я даже пробовал другие версии, такие как v0.11.x или v0.10.33)
Грозный пример
Picture.upload = function(user, req, cb) {
var formidable = require('formidable')
var form = new formidable.IncomingForm();
form.uploadDir = "./uploads";
form.maxFieldsSize = app.settings.uploadMaxSize * 1024 * 1024;
form.maxFields = 1000;
form.parse(req, function(err, fields, files) {
cb(null, files);
});
}
Пример мультипликатора
app.use(multer({ dest: './uploads/',
rename: function (fieldname, filename) {
return filename+Date.now();
},
limits: {
files: 1,
fileSize: app.settings.uploadMaxSize * 1024 * 1024
}
})); // after I process the file from req.files
Файл загружен как multipart/form-data
.
Я использую loopback, но не думаю, что это имеет значение.
fs.createReadStream(filePath) .pipe(fs.createWriteStream('public/images/' + filename)) .on('close', function () { fs.unlink(filePath, function () { callback(null, '/images/' + filename); }); });
используйте его в качестве контроллера в конечной точке загрузки. - person Evan P   schedule 05.02.2015form.parse
?) - person marka.thore   schedule 05.02.2015multer
илиformidable
. Попробуйте и вы. Это будет значительно быстрее. - person Gabriel Tomitsuka   schedule 14.02.2015// after I process the file from req.files
и у меня такое ощущение, что, возможно, вы обрабатываете файл после его загрузки в том же потоке выполнения, что и загрузка файла. Это может привести к блокировке, в которой я бы рекомендовал что-то вроде kue или какой-либо другой метод перемещения логически интенсивных код на рабочий узел. - person tsturzl   schedule 16.02.2015