uploadFileStream method
Implementation
Future<bool> uploadFileStream(
FtpFile file,
Stream<List<int>> data,
int fileSize, {
bool append = false,
OnTransferProgress? onUploadProgress,
}) =>
_socket.openTransferChannel((socketFuture, log) async {
(append ? FtpCommand.APPE : FtpCommand.STOR).write(
_socket,
[file.path],
);
final socket = await socketFuture;
final response = await _socket.read();
// wait 125 || 150 and >200 that indicates the end of the transfer
final bool transferCompleted = response.isSuccessfulForDataTransfer;
if (!transferCompleted) {
throw FtpException('Error while uploading file');
}
var uploaded = 0;
final transform = data.transform<Uint8List>(
StreamTransformer.fromHandlers(
handleData: (event, sink) {
sink.add(Uint8List.fromList(event));
uploaded += event.length;
final total = max(fileSize, uploaded);
onUploadProgress?.call(uploaded, total, uploaded / total * 100);
log?.call('Uploaded $uploaded of $total bytes');
},
),
);
await socket.addSteam(transform);
await socket.flush;
await socket.close(ClientSocketDirection.readWrite);
final response2 = await _socket.read();
return response2.isSuccessful;
});