import 'dart:io'; import 'package:app/global/config.dart'; import 'package:app/request/api/common_api.dart'; import 'package:app/request/dto/common/qiu_token_dto.dart'; import 'package:crypto/crypto.dart'; import 'package:dio/dio.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; class QinUpload { ///获取七牛token static Future _getQiuToken(File file, String path) async { // 读取文件的字节数据 final fileBytes = await file.readAsBytes(); String fileMd5 = md5.convert(fileBytes).toString(); //前缀 var prefix = Config.getEnv() == "dev" ? "test" : "release"; var suffix = file.path.split(".").last; var res = await getQiuTokenApi( "xueguang/$prefix/$path/$fileMd5.$suffix", ); return res; } ///上传文件 /// - [file] 文件 /// - [path] 目标目录 static Future upload({ required File file, required String path, }) async { var qiuToken = await _getQiuToken(file, path); //数据 FormData formData = FormData.fromMap({ "file": await MultipartFile.fromFile(file.path), "token": qiuToken.upToken, "fname": qiuToken.fileKey, "key": qiuToken.fileKey, }); try { Dio dio = Dio(); Response response = await dio.post( qiuToken.uploadUrl!, data: formData, onSendProgress: (int sent, int total) {}, ); String key = response.data['key']; return "https://${qiuToken.domain}/$key"; } catch (e) { EasyLoading.showError("上传失败"); return null; } } }