【问题标题】:socket.io-stream doesn't emit eventsocket.io-stream 不发出事件
【发布时间】:2014-08-28 00:21:16
【问题描述】:

我正在尝试通过 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 + '%');
    });
};

【问题讨论】:

  • 我刚刚尝试运行来自NPM site 的示例代码(稍作修改),它适用于 Socket.IO 1.0.4 和最新的 Socket.IO-stream。你能展示你的完整代码吗?
  • 我将代码添加到主帖中。

标签: node.js file-upload websocket socket.io socket.io-1.0


【解决方案1】:

根据documentation,你必须发出stream,而不是file

尝试替换

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

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

【讨论】:

    【解决方案2】:

    here所述,在客户端包含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)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2019-10-30
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      相关资源
      最近更新 更多