uploadStream method
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();
}
}