writeStreamFile function
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;
}