import 'dart:io'; import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:huixiang/constant.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:path_provider/path_provider.dart'; import 'package:qiniu_flutter_sdk/qiniu_flutter_sdk.dart'; class Qiniu { Storage storage = Storage(config: Config()); PutController putController = PutController(); progressListener() { // 添加任务进度监听 putController.addProgressListener((double percent) { print('任务进度变化:已发送:$percent'); }); // 添加文件发送进度监听 putController.addSendProgressListener((double percent) { print('已上传进度变化:已发送:$percent'); }); // 添加任务状态监听 putController.addStatusListener((StorageStatus status) { print('状态变化: 当前任务状态:$status'); }); } Future uploadFile(ApiService apiService, String filePath) async { String token = await _getToken(apiService); File file = File(filePath); PutResponse putResponse = await storage.putFile(file, token, options: PutOptions( controller: putController, key: filePath.split('/').last, )); debugPrint("qiniuToken-result: ${putResponse.toJson()}"); return "$chatImageHost/${putResponse.key}"; } Future _getToken(ApiService apiService) async { BaseData baseData = await apiService.getQiniuToken() .catchError((error){ debugPrint("getQiniuToken: $error"); }); if (baseData.isSuccess) { return baseData.data; } else { debugPrint("get token fail, check network"); throw Error(); } } final Dio dio = Dio(); Future downloadFile(String urlPath, {String savePath}) async { Directory dir = await getTemporaryDirectory(); File newFile; if (savePath != null && savePath != '') { newFile = File(savePath); } else { newFile = File("${dir.path}/hx_${urlPath.split('/').last}"); } Response response = await dio.download(urlPath, newFile.path); if (response.statusCode == 200) { return newFile.path; } return null; } }