writeStreamFile function

Future<Link> writeStreamFile(
  1. LocalFile file,
  2. String root,
  3. void onError(
    1. String reason
    )
)

Implementation

Future<Link> writeStreamFile(
  LocalFile file,
  String root,
  void Function(String reason) onError,
) async {
  final name = file.path ?? '';
  final path = name.startsWith('/') ? name.substring(1) : name;
  final dir = p.join(root, path);
  if (!Directory(dir).existsSync()) {
    onError("Directory '$name' not exists!");
  }
  final filename = file.filename;
  final basename = p.basenameWithoutExtension(filename);
  final ext = p.extension(filename);

  // write file into static folder
  final extKey = ext.replaceAll('.', '');
  final folder = fileDirectories[extKey] ?? defaultFileDirectory;
  final fileId = file.fileId;
  final target = p.join(root, 'static', folder, '$fileId$ext');
  final sink = File(target).openWrite();
  await sink.addStream(file.stream);
  await sink.close();

  String filepath = p.join(dir, filename);
  int n = 1;
  while (FileSystemEntity.typeSync(filepath) != FileSystemEntityType.notFound) {
    filepath = p.join(dir, '$basename(${n++})$ext');
  }
  final link = await Link(filepath).create(p.relative(target, from: dir));
  print('writeStreamFile: Create link ${link.path} -> $target');
  return link;
}