uploadStream method

Future<void> uploadStream(
  1. String path,
  2. Stream<Uint8List> chunks, {
  3. bool overwrite = false,
  4. int chunkSize = 64 * 1024,
  5. int? size,
  6. String? name,
  7. String? mimeType,
})

Implementation

Future<void> uploadStream(
  String path,
  Stream<Uint8List> chunks, {
  bool overwrite = false,
  int chunkSize = 64 * 1024,
  int? size,
  String? name,
  String? mimeType,
}) async {
  final input = _StorageUploadInputStream(
    path: path,
    overwrite: overwrite,
    chunks: chunks,
    chunkSize: chunkSize,
    size: size,
    name: _defaultUploadName(path, name: name),
    mimeType: mimeType,
  );
  final output = await room.invoke(toolkit: "storage", tool: "upload", input: ToolStreamInput(input.inputStream()));

  if (output is! ToolStreamOutput) {
    input.close();
    throw _unexpectedResponseError("upload");
  }

  try {
    await for (final chunk in output.stream) {
      if (chunk is ErrorContent) {
        throw RoomServerException(chunk.text, code: chunk.code);
      }
      if (chunk is ControlContent) {
        if (chunk.method == "close") {
          return;
        }
        throw _unexpectedResponseError("upload");
      }
      if (chunk is! BinaryContent || chunk.headers["kind"] != "pull") {
        throw _unexpectedResponseError("upload");
      }
      input.requestNext();
    }
  } finally {
    input.close();
  }
}