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);
  });
}