Flutter 如何使用flatter将文件发送到node.js服务器?
我正在使用Flutter 如何使用flatter将文件发送到node.js服务器?,flutter,dart,socket.io,Flutter,Dart,Socket.io,我正在使用socket\u io\u client包与nodejs socket服务器通信。 以下是我的颤振插座配置: socket = IO.io(SocketUrl.url, <String, dynamic>{ 'transports': ["websocket"], "autoConnect": false }); socket.connect(); socket.on('connect', (_) { print(
socket\u io\u client
包与nodejs socket服务器通信。
以下是我的颤振插座配置:
socket = IO.io(SocketUrl.url, <String, dynamic>{
'transports': ["websocket"],
"autoConnect": false
});
socket.connect();
socket.on('connect', (_) {
print('socket connected to server');
});
socket.on('newMessage', (message) {
print(message);
});
socket.on('event', (data) => print(data));
socket.on('disconnect', (_) => print('disconnect'));
}
这是如何从节点客户端完成的。我需要编写上述代码的dart版本。我看到quiver包有异步函数来创建streambuffer,但我不知道如何为这个特定的应用程序实现它
编辑:
void onSendFile(file, data) async {
final isFile = File(file);
var buffer = isFile.openRead();
//socket.emit("send-file",[buffer,data]);
socket.emitWithBinary("send-file", [buffer, data]);
}
阅读API参考资料并发布在
socket\u io\u client
的repo上,您应该能够使用socket.emitWithBinary
发送二进制文件
假设你已经有了一个上a的方法,你最有可能做到这一点
final myFile=File('File.txt');
final bytes=wait myFile.readAsBytes();
emitWithBinary('send-file',字节);
更新
从socket io client的JS版本来看,emit
函数能够接受多个参数,最终是这样,因此我假设通过将数组传递给emitWithBinary
或emit
注意
看到您的JS版本不包含任何binary
标志,您可能想尝试emit
socket.emit(
“发送文件”,
[
123,
{
“userId”:currentUser.id,
“file”:file.name,
},
],
);
您可以使用软件包参见官方示例
将文件转换为字节并接收到流
final bytes = await myFile.readAsBytes();
main() async {
var channel = IOWebSocketChannel.connect("ws://localhost:1234");
channel.stream.listen((message) {
channel.sink.add(bytes);
channel.sink.close(status.goingAway);
});
}
即使我这样做,也要传递三个参数。我仍然需要发送数据。这样做,我可能可以发送文件,但它不接受第三个参数,即数据。json编码第三个参数(尤其是字节)不起作用。更新了答案。请注意,我实际上并没有对它进行测试,我只是浏览了JS和Dart版本的socket io实现的源代码。谢谢您浏览了所有这些。我尝试了以上的解决方案,但没有成功。我只是想通过使用NodeJS在web上创建聊天平台来实现文件共享。我被告知数据将是“缓冲区”类型,使用的流是双工流。请确保您是否已经在emitWithBinary上进行了测试。如果它是您想要的流/缓冲区,请尝试使用
openRead
读取文件。我已将代码添加到问题中。这就是我迄今为止所尝试的。谢谢你的建议,但我尝试了所有的套接字库,只有socket_io_客户端对我有效。使用其他库时,由于某种原因,我甚至无法连接到套接字url。
final bytes = await myFile.readAsBytes();
main() async {
var channel = IOWebSocketChannel.connect("ws://localhost:1234");
channel.stream.listen((message) {
channel.sink.add(bytes);
channel.sink.close(status.goingAway);
});
}