import 'dart:convert'; import 'dart:io'; import 'dart:math'; import 'package:circle_app/util/util.dart'; import 'package:flutter_luban/flutter_luban.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:image_picker/image_picker.dart'; import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart'; import 'package:intl/intl.dart'; import '../common/config.dart'; import '../network/api.dart'; import '../network/dio_manager.dart'; typedef void MyCallback(String result); //上传七牛云 void updataQiniu(String filePath,String name,String path ,String quToken,MyCallback myCallback) { var storage = Storage(); DateTime now = DateTime.now(); String yearMonth = DateFormat('yyyyMM').format(now); String imgPath = path +yearMonth+"/"+generateRandomString(16)+ name; PutController putController = PutController(); putController.addStatusListener((StorageStatus status) { if (status == StorageStatus.Success) { var headUrl = CONFIG.IMAGE_HEAD + imgPath; myCallback(headUrl); } print('状态变化: 当前任务状态:$status'); }); putController.addProgressListener((double status) { print('上传进度: $status'); }); storage.putFile(File(filePath), quToken, options: PutOptions(controller: putController, key: imgPath)); } //封装上传图片 void upDataImage(String quToken ,XFile pickedFile,String updataRoute,MyCallback myCallback) async{ // print(quToken); if(quToken.isEmpty){ var data = await DioManager.instance.get(url: Api.getqiniuToken, params: {}); var bean = BaseResponse.fromJson( data, (data) => QnTokenData.fromJson(data)); if(bean.isSuccess()){ quToken = bean.data!.token.toString(); }else{ showToast("图片上传失败"); SmartDialog.dismiss(force: true); return; } } var path = await getApplicationSupportDirectoryPath(); CompressObject compressObject = CompressObject( imageFile:File(pickedFile.path), //image path:path, //compress to path quality: 80,//first compress quality, default 80 step: 9,//compress quality step, The bigger the fast, Smaller is more accurate, default 6 mode: CompressMode.LARGE2SMALL,//default AUTO ); Luban.compressImage(compressObject).then((_path) { updataQiniu(_path.toString(),pickedFile.name,updataRoute,quToken,(result){ myCallback(result); }); }); } String generateRandomString(int length) { var random = Random.secure(); var values = List.generate(length, (index) => random.nextInt(256)); var randomString = base64Url.encode(values); return randomString.substring(0, length); }