Electron sending file by socket.io-stream failed with 'TypeError: Invalid non-string/buffer chunk'

Electron sending file by socket.io-stream failed with 'TypeError: Invalid non-string/buffer chunk'

我正在使用 Electron 创建一个应用程序。我需要使用 Socket.IO 将文件发送到服务器,所以我安装了 socket.io-stream 模块。我在浏览器上测试过,效果很好。但是在 Electron 中做同样的事情,它总是失败

TypeError: Invalid non-string/buffer chunk

这是服务器端代码:

ss(socket).on('/user/update/profile', (stream, data) => {
    const filename = path.basename(data.name);
    const ws = fs.createWriteStream(`userdata/profile/${filename}`);

    stream.on('error', (e) => {
        console.log('Error found:');
        console.log(e);
    });
    stream.on('drain', (e) => {
        console.log('drain');
    });
    stream.on('data', () => {
        console.log('data');
    });
    stream.on('close', () => {
        console.log('close');
    });
    stream.pipe(ws);

    //ss(socket).emit('/user/update/profile', {});
});

这是客户端代码:

var file = ev.target.files[0];
var stream = ss.createStream();

ss(socket).emit('/user/update/profile', stream, {
    email: this.props.user.email,
    name: file.name,
    size: file.size
});

var blobStream = ss.createBlobReadStream(file);
var size = 0;
blobStream.on('data', (chunk) => {
    size += chunk.length;
    console.log(`${size} / ${file.size}`);
});
blobStream.pipe(stream);

代码很简单,就取自NPM模块介绍页面的例子。我已经说过它可以作为浏览器使用。您会看到我在控制台上记录了每个文件的上传进度。使用 Electron,发送文件似乎可以工作,因为它记录了每个数据大小,但在服务器端,它失败了。

我在 NW.js 中发现了类似的问题,那个人用他自己的方式解决了他的问题,但这对我不起作用。

非常感谢帮助我该怎么做。

该错误意味着您正在传递一个 non-string(例如一个对象),其中需要一个字符串。我看不出这可能在哪里,但由于它在浏览器中工作,而不是在 Electron 中工作,所以可能是底层 Javascript 引擎对这个问题有不同的容忍度。你能在节点调试器中 运行 一样吗?其中一个流是否抱怨或异常中断?你能缩小这是哪条线吗?