85 lines
2.6 KiB
Dart
85 lines
2.6 KiB
Dart
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<QnTokenData>.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<int>.generate(length, (index) => random.nextInt(256));
|
|
var randomString = base64Url.encode(values);
|
|
return randomString.substring(0, length);
|
|
} |