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;
  // }
}