uploadLogsToCos method

Future<bool> uploadLogsToCos(
  1. File zipFile
)

上传日志工具函数 zipFile 压缩后的zip文件 @example

Tools.uploadLogs(zipFile);

Implementation

Future<bool> uploadLogsToCos(File zipFile) async {
  // try {
  final cosTokenResult = await TCICController.instance.getCosToken();
  TCICLog.info(
    "cosTokenResult: ${cosTokenResult?.toJson()}",
    actionModule: ActionModule.tcicController.name,
    actionName: ActionName.uploadLogs.name,
  );
  if (cosTokenResult != null) {
    await TCos.instance.initialize(cosTokenResult);
    String uploadKey = "";
    final resultPath = cosTokenResult.path;
    final docName = cosTokenResult.docName;
    if (resultPath.isNotEmpty && docName.isNotEmpty) {
      uploadKey = '$resultPath$docName.pdf';
    } else {
      uploadKey = 'document/${DateTime.now().millisecondsSinceEpoch}.pdf';
    }
    final filePath = zipFile.path;
    // 性能优化:移动端 COS SDK 走 filePath 上传,不需要把整个 zip 读入内存。
    // 读大文件会在 UI isolate 产生明显卡顿/GC 压力(ANR 风险)。
    // final bytes = TcicScreen.isMobile() ? null : await zipFile.readAsBytes();
    final specifiedContentType = 'application/pdf';
    final bucketName = '${cosTokenResult.bucketName}-${cosTokenResult.appId}';
    final region = cosTokenResult.region;
    TCICLog.info(
      "uploadKey: $uploadKey filePath: $filePath  specifiedContentType: $specifiedContentType bucketName: $bucketName region: $region",
      actionModule: ActionModule.tcicController.name,
      actionName: ActionName.uploadLogs.name,
    );
    final task = await TCos.instance.uploadFile(
      region: region,
      bucketName: bucketName,
      cosPath: uploadKey,
      srcPath: filePath,
      bytes: null,
      specifiedContentType: specifiedContentType,
      successCallBack: (header, result) async {
        TCICLog.info(
          "upload logs success",
          actionModule: ActionModule.tcicController.name,
          actionName: ActionName.uploadLogs.name,
        );
        // 删除zip文件
        TCICToast.show(StringEnum.uploadLogsSuccess);
        await zipFile.delete();
      },
      failCallBack: (error, serviceException) async {
        TCICLog.error(
          "upload logs failed error: ${error?.errorCode} ${error?.message} ${error?.details} serviceException: ${serviceException?.errorCode} ${serviceException?.errorMessage} ${serviceException?.details}",
          actionModule: ActionModule.tcicController.name,
          actionName: ActionName.uploadLogs.name,
        );
        // 删除zip文件
        TCICToast.show(StringEnum.uploadLogsFailed);
        await zipFile.delete();
      },
      progressCallBack: (int loaded, int total) {
        if (loaded == total) {
          TCICLog.info(
            "upload logs progress: $loaded/$total",
            actionModule: ActionModule.tcicController.name,
            actionName: ActionName.uploadLogs.name,
          );
        }
      },
    );
    if (task != null) {
      return true;
    } else {
      TCICLog.error(
        "upload logs task is null",
        actionModule: ActionModule.tcicController.name,
        actionName: ActionName.uploadLogs.name,
      );
      return false;
    }
  }
  return false;
  // } catch (e) {
  //   TCICLog.error("upload logs failed: stackTrace: ${StackTrace.current}", actionModule: ActionModule.tools.name, actionName: ActionName.uploadLogs.name);
  //   return false;
  // }
}