socket.io-stream не генерирует событие

Я пытаюсь создать загрузку файла через socket.io 1.0.4 и последнюю версию socket.io-stream. Каждый раз, когда я пытаюсь передать ss(socket).emit('mediaupload', file);, событие выполняется на клиенте, но не вызывается на стороне сервера. Я не получаю сообщений об отладке или ошибках. Если я попытаюсь передать событие через socket.emit('mediaupload'), сервер получит это событие.

Объявление сервера

ss(socket).on('mediaupload', function(stream, data) {
debug('Data:', data);
...
}

Я уже не знаю, что попробовать.

uploadFile: function (fileWithMeta, callback_end, callback_data) {
        var file=fileWithMeta.file;

        var stream = ss.createStream();
        log.log('File to Upload with stream: ', stream);
        ss(socket).emit('mediaupload', file);

        var blobStream = ss.createBlobReadStream(file);
        if (callback_end){
            blobStream.on('end', function(e) {
                callback_end(e);
            });
        }

        if (callback_data){
            var uploadedSize=0;
            blobStream.on('data', function(chunk) {
                uploadedSize+=chunk.length;
                callback_data(Math.floor(uploadedSize / file.size * 100), uploadedSize, chunk);
            });
        }
        blobStream.pipe(stream);
    }

Я прочитал входной файл по директиве angularjs.

angular.module('oo.util').directive('ooFileReader', ['ooLog', '$parse', function (log, $parse) {
var slice = Array.prototype.slice;
return {
    restrict: 'A',
    //scope: false,
    link: function (scope, element, attrs) {
        element.bind("change", function (e) {
            $parse(attrs.ooFileReader).assign(scope, e.target.files[0]);                
        });
    }
};}]);

часть шаблона

 <input name="fileupload" type="file" oo-file-reader="fileupload" multiple>

Вызов функции: uploadFile вызывается с переменной $scope.fileupload.

$scope.uploadFile=function(file){
    log.log('Add File: ', file);
    websocket.uploadFile(file, function(){
        log.log('Upload Finished!');
    }, function(percentUploaded){
        log.log('Uploading: ' + percentUploaded + '%');
    });
};

person Michael Mauracher    schedule 07.07.2014    source источник
comment
Я только что попытался запустить код примера (немного измененный) с сайта NPM, и он отлично работает с Socket.IO 1.0.4 и последним потоком Socket.IO. Можете ли вы показать свой полный код?   -  person Oleg    schedule 07.07.2014
comment
Добавил код в основной пост.   -  person Michael Mauracher    schedule 08.07.2014


Ответы (2)


После включения сценария socket.io-stream на клиенте, как описано здесь:

cp node_modules/socket.io-stream/socket.io-stream.js somewhere/public/

вы можете сделать что-то вроде следующего:

function(file){
  var stream = ss.createStream();
  ss(socket).emit("stream", stream, {},function(){})
  ss.createBlobReadStream(file).pipe(stream)
}
person Thomas Luechtefeld    schedule 14.03.2015

Согласно документации, вы должны выдавать stream, а не file.

Попробуйте заменить

ss(socket).emit('mediaupload', file);

с

ss(socket).emit('mediaupload', stream);
person Oleg    schedule 10.07.2014