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 引擎对这个问题有不同的容忍度。你能在节点调试器中 运行 一样吗?其中一个流是否抱怨或异常中断?你能缩小这是哪条线吗?
我正在使用 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 引擎对这个问题有不同的容忍度。你能在节点调试器中 运行 一样吗?其中一个流是否抱怨或异常中断?你能缩小这是哪条线吗?