модуль node-cloudfiles — есть ли способ отслеживать ход загрузки

Если кто-то здесь знаком с модулем node-cloudfiles для node.js, мне может понадобиться помощь в нескольких разных областях. К сожалению, кажется, что с авторами почти невозможно связаться через их репозиторий github (EDIT: неважно, кто-то связался со мной, я отправлю обновление, когда у меня будет какой-то ответ).

Я начну с самой простой задачи: есть ли способ отслеживать ход загрузки? Я пробовал много вещей, но объект, возвращаемый командой .addFile, похоже, не содержит никакой статистики прогресса.

Вот основная схема того, с чем я работаю.

var readStream = fs.createReadStream(path+'.'+extension, streamopts);
var upOpts = {
    headers: {
        'content-type': 'video/'+extension,
        'content-length': totalBytes
    },
    remote: CDNfilename, 
    stream: readStream
};

//reqStream is the object returned from the 'request' module, 
//which is used by the 'cloudfiles' module.
var reqStream = cloudClient.addFile(Container.name, upOpts, function (err, uploaded) {
    if (err) { console.log(err); }

});

Сначала я подумал, что могу просто использовать свойство .bytesWritten, связанное с интервальным таймером, но объект не является обычным узлом writeStream, поэтому такого свойства нет.


person agentOOjoe    schedule 21.12.2011    source источник


Ответы (2)


Чарли (автор модуля) сказал мне, что это возможно, потому что он использует канал, и вы просто проверяете события данных из объекта, возвращаемого из .addFile, например так:

reqStream.on('data', function () { 
  /* track progress /* 
});

Всякий раз, когда вам нужно связаться с кем-то из команды nodejitsu, присоединяйтесь к каналу #nodejitsu в IRC, они очень активны.

person alessioalex    schedule 21.12.2011
comment
Привет, alessioalex, спасибо за ответ. Вероятно, мне следовало упомянуть, что я пытался отслеживать прослушиватель данных для исходного потока чтения (readStream), но оказалось, что он не ставится на паузу, как я ожидал (поскольку это .pipe). Из-за этого исходный поток чтения заканчивается, как только система может его разорвать, и фактически не представляет данные, полученные потоком, идущим в облачные файлы. - person agentOOjoe; 21.12.2011
comment
Теперь я попробовал прослушиватель данных в reqStream, и я очень удивлен, увидев, что у него даже есть прослушиватель данных (я предположил, что это больше похоже на традиционный узел writeStream, у которого нет прослушивателей данных). Однако ведет себя как-то странно. Это событие генерируется только один раз, а data.length всегда слишком мал. Похоже, что он испускается только один раз, когда загрузка завершена. Я буду продолжать смотреть на это, хотя. - person agentOOjoe; 21.12.2011

На момент написания этого ответа на самом деле не было хорошего способа получить ход загрузки файлов, отправляемых в облачные файлы. Однако один из гениев nodejitsu реализовал загрузку по частям, что в моем случае устраняет необходимость в отчетах о ходе выполнения. Спасибо Брэдли.

person agentOOjoe    schedule 22.12.2011