import 'dart:async'; import 'dart:math'; import 'package:common_utils/common_utils.dart'; import 'package:dio/dio.dart'; import 'package:tencentcloud_cos_sdk_plugin/cos.dart'; import 'package:tencentcloud_cos_sdk_plugin/cos_transfer_manger.dart'; import 'package:tencentcloud_cos_sdk_plugin/pigeon.dart'; class UploadOss { static final UploadOss _shared = UploadOss._internal(); factory UploadOss() => _shared; static const bucket = 'deepsound-1253517901'; static const region = 'ap-guangzhou'; static CosTransferManger? _cosTransferManger; UploadOss._internal(); static Future getTransferManger() async { if (_cosTransferManger == null) { await Cos().initWithPlainSecret('AKID9F8qNiqlTzIMFwQ9rQxNcgYCdsukNmzA', 'OYVGo8HEzWpvpfHgtfHfqpcDbnlY7Tdc'); if (Cos().hasTransferManger(region)) { _cosTransferManger = Cos().getTransferManger(region); } else { CosXmlServiceConfig serviceConfig = CosXmlServiceConfig( region: region, isHttps: true, ); _cosTransferManger = await Cos().registerTransferManger( region, serviceConfig..region = region, TransferConfig()); } } return _cosTransferManger!; } static Future upload({ String? filepath, String rootDir = 'file', String? fileType, Function? callback, ProgressCallback? onSendProgress, }) async { String pathName = '$rootDir/${getDate()}/${getRandom(12)}.${fileType ?? getFileType(filepath!)}'; CosTransferManger cosTransferManger = await getTransferManger(); final completer = Completer(); await cosTransferManger.upload( bucket, pathName, filePath: filepath, resultListener: ResultListener( (Map? header, CosXmlResult? result) { final url = result?.accessUrl ?? 'https://$bucket.cos.$region.myqcloud.com/$pathName'; completer.complete(url); }, (clientException, serviceException) { completer.completeError(clientException ?? serviceException ?? Exception('Unknown error')); }, ), ); return completer.future; } static String getDate() { DateTime now = DateTime.now(); return DateUtil.formatDate(now, format: 'yyyy/MM/dd'); } static String getRandom(int num) { String alphabet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'; String left = ''; for (var i = 0; i < num; i++) { left = left + alphabet[Random().nextInt(alphabet.length)]; } return left; } static String getFileType(String path) { List array = path.split('.'); return array[array.length - 1]; } }