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.
82 lines
2.2 KiB
82 lines
2.2 KiB
import 'dart:io'; |
|
|
|
import 'package:dio/dio.dart'; |
|
import 'package:flutter/cupertino.dart'; |
|
import 'package:huixiang/constant.dart'; |
|
import 'package:huixiang/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<String> 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<String> _getToken(ApiService apiService) async { |
|
BaseData<String> baseData = await apiService.getQiniuToken() |
|
.catchError((error){ |
|
debugPrint("getQiniuToken: $error"); |
|
}); |
|
if (baseData.isSuccess ?? false) { |
|
return baseData.data ?? ""; |
|
} else { |
|
debugPrint("get token fail, check network"); |
|
throw Error(); |
|
} |
|
} |
|
|
|
final Dio dio = Dio(); |
|
|
|
Future<String?> 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; |
|
} |
|
|
|
} |
|
|
|
|