【问题标题】:Socket.io and file transfer in Node.jsNode.js 中的 Socket.io 和文件传输
【发布时间】:2018-07-06 06:45:44
【问题描述】:

我是 nodejs 的新手,我正在尝试实现从服务器到 Web 客户端的文件传输。说,服务器的工作是截取屏幕截图并将其发送到Web客户端我已经通过express实现了服务器和客户端之间的连接,并且我能够检查客户端是否连接,因为我使用的是express和socket。 io 我希望通过 'socket.broadcast.emit' 发送捕获的图像

这是我正在使用的代码:

sources.forEach(function (source) {
   if(source.name === "Entire screen" || source.name === "Screen 1" ){
        if(screenShotPath === ''){
            screenShotPath = path.join(os.tmpdir(),'screenshot.jpeg');
        }
        console.log(screenShotPath);
        io.sockets.on('connection', function(socket){
            console.log('A new client is conencted');
            socket.broadcast.emit('img', source.thumbnail.toPNG);

        })
        fs.writeFile(screenShotPath,source.thumbnail.toPNG(), function (err) {
            if(err) return console.log(err.message);

            shell.openExternal("file://"+screenShotPath);
            var message = 'Saved SS to ' + screenShotPath;
            screenshotMsg.textContent = message;
        });
   }
});

这行得通吗?有人可以告诉我如何接收发送的流吗? 这是发送图像并在 Web 客户端中接收图像的方式,还是有更简单的方法来实现此功能?

还有。有没有办法在两台服务器之间发送图像?假设一台服务器正在截屏,我必须将此图像保存在另一个服务器系统中,有没有办法做到这一点?

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    你需要广播base64编码的图片,然后使用data URI来显示。

    const fs = require('fs');
    
    const imgFile = fs.readFileSync(filePath);
    const imgBase64 = new Buffer(imgFile).toString('base64');
    
    socket.broadcast.emit('img', imgBase64);
    
    socket.on('img', (data) => {
      const imgTag = `<img src="data:image/png;base64, ${data}"/>` // inject into DOM
    });
    

    【讨论】:

    • 所以,我应该将图像编码为 base64,然后使用此代码发送吗?
    • 您能否告诉我在两台服务器之间发送此图像的最佳方式是什么?假设一台服务器是截取屏幕截图的应用程序,如果我想将图像保存到远程服务器我应该怎么做?我也编辑了我的问题
    • 服务器也可以是 socket.io 中的“客户端”,所以你可以让远程服务器像客户端一样监听消息,并保存传入的图像。
    • delivery.js 可以用来做这个吗?
    • 有 npm 吗?
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多