zipImageAndCsv method

Future<String> zipImageAndCsv(
  1. {required String zipFileName,
  2. required String imageFilePath,
  3. required List<String> csvFilePath}
)

Implementation

Future<String> zipImageAndCsv({
  required String zipFileName,
  required String imageFilePath,
  required List<String> csvFilePath,
}) async {
  try {
    final directory = await getTemporaryDirectory();
    final zipFilePath = '${directory.path}/$zipFileName';
    final zipFile = File(zipFilePath);

    final archive = Archive();
    final fileName = imageFilePath.split('/').last;
    final imageFile = File(imageFilePath);
    final imageBytes = await imageFile.readAsBytes();
    archive.addFile(ArchiveFile(fileName, imageBytes.length, imageBytes));

    if (csvFilePath.isEmpty) {
      throw Exception('csvファイルが存在しません');
    }

    for (final path in csvFilePath) {
      // pathからファイル名を取得
      final fileName = path.split('/').last;
      final csvFile = File(path);
      final csvBytes = await csvFile.readAsBytes();
      archive.addFile(ArchiveFile(fileName, csvBytes.length, csvBytes));
    }

    final zipData = ZipEncoder().encode(archive);
    if (zipData == null) {
      throw Exception('zipファイルの作成に失敗しました');
    }
    await zipFile.writeAsBytes(zipData);

    return zipFilePath;
  } catch (e) {
    throw Exception('zipファイルの作成に失敗しました: $e');
  }
}