diff --git a/app/lib/package/backend.dart b/app/lib/package/backend.dart index bf9979d4e1..3d4abee134 100644 --- a/app/lib/package/backend.dart +++ b/app/lib/package/backend.dart @@ -1824,25 +1824,26 @@ Future _saveTarballToFS(Stream> data, String filename) async { if (await targetFile.exists()) { await targetFile.delete(); } + late IOSink sink; try { + sink = targetFile.openWrite(); int receivedBytes = 0; - final stream = data.transform>( - StreamTransformer, List>.fromHandlers( - handleData: (chunk, sink) { - receivedBytes += chunk.length; - if (receivedBytes <= UploadSignerService.maxUploadSize) { - sink.add(chunk); - } else { - sink.addError(PackageRejectedException.archiveTooLarge( - UploadSignerService.maxUploadSize)); - } - }, - ), - ); - await stream.pipe(targetFile.openWrite()); + await for (final chunk in data) { + receivedBytes += chunk.length; + if (receivedBytes <= UploadSignerService.maxUploadSize) { + sink.add(chunk); + } else { + await sink.close(); + throw PackageRejectedException.archiveTooLarge( + UploadSignerService.maxUploadSize); + } + } + await sink.flush(); } catch (e, st) { _logger.warning('An error occurred while streaming tarball to FS.', e, st); rethrow; + } finally { + await sink.close(); } _logger.info('Finished streaming tarball to FS (elapsed: ${sw.elapsed}).'); }