uploadLogsToCos method
上传日志工具函数
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;
// }
}