You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.7 KiB
89 lines
2.7 KiB
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<CosTransferManger> 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<String> 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<String>();
|
|
await cosTransferManger.upload(
|
|
bucket,
|
|
pathName,
|
|
filePath: filepath,
|
|
progressCallBack: onSendProgress,
|
|
resultListener: ResultListener(
|
|
(Map<String?, String?>? 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<String> array = path.split('.');
|
|
return array[array.length - 1];
|
|
}
|
|
}
|
|
|