download static method

Future<File> download({
  1. required FileModel file,
  2. required String downloadPath,
})

파일 저장

저장 전 저장소 접근 권한을 얻어야 함

Implementation

static Future<File> download({
  required FileModel file,
  required String downloadPath,
}) async {
  var url = ApiPath.loadFile.addGetParam({"fileKey": file.fileKey});

  var request = await get(url);
  var savedFile = File(
    "$downloadPath${Util.pathSeparator}${file.fileKey}_${file.originFileNm ?? file.fileNm}",
  );

  if (Util.isWeb) {
    var a = html.AnchorElement(href: url.toString());
    a.download = 'true';
    a.click();
    a.remove();
  } else {
    // 저장 경로까지 폴더를 생성
    await Directory(downloadPath).create(recursive: true);
    if (await savedFile.exists()) {
      var i = 1;
      // 파일 이름이 중복일 경우 체크
      while (await savedFile.exists()) {
        var match = RegExp(r"\((\d+)\).\w+$").allMatches(savedFile.path);
        if (match.isEmpty) {
          savedFile = File(
            savedFile.path
                .replaceFirst(".${file.fileExt}", " ($i).${file.fileExt}"),
          );
        } else {
          savedFile = File(
            savedFile.path.replaceFirst(
                " ($i).${file.fileExt}", " (${i + 1}).${file.fileExt}"),
          );
          i++;
        }
      }
    }
    await savedFile.writeAsBytes(request.bodyBytes);
  }

  return savedFile;
}