首页 > 解决方案 > Dart Flutter Socket 是否可以通过套接字接收文件?

问题描述

Dart Flutter Socket 是否可以通过套接字接收文件?例如图片 jpeg

标签: filefluttersocketsdart

解决方案


bad, but it works, maybe someone needs to receive a file via a TCP socket, the only thing you need to know is the file size

Future<String> getImageFile(String request) async {
  Socket socket;
  final path = await _localPath;
  BytesBuilder builder = new BytesBuilder(copy: false);

  void doneHandlerDone(){
    socket.close();
  }

  void dataHandler(data){
    builder.add(data);

    if (builder.length >= 1716980) { // file size
      Uint8List dt = builder.takeBytes();
      final filename = 'test1.jpg';

      writeToFile(dt.buffer.asByteData(0, dt.buffer.lengthInBytes), '$path/$filename');
      doneHandlerDone();
    }
  }

  void errorHandler(error, StackTrace trace){
    print(error);
  }

  Socket.connect(ip, port).then((Socket sock) {
    socket = sock;
    socket.listen(dataHandler, onError: errorHandler, onDone: doneHandlerDone, cancelOnError: false);
  }).then((_) {
    socket.write('$request\r\n');
  }).catchError((Object e) {
    print("Unable to connect: $e");
  });
  return null;
}

Future<void> writeToFile(ByteData data, String path) {
  final buffer = data.buffer;
  return new File(path).writeAsBytes(buffer.asUint8List(data.offsetInBytes, data.lengthInBytes));
}

推荐阅读