//文件下载
//url 下载的地址
//progressCallback 下载进度变化时的回调,用来实现进度条
Future<Response> dioDownload(String url, progressCallback) async {
Dio dio = Dio();
CancelToken cancelToken = CancelToken();//可以用来取消操作
String docPath = await Application.fileUtil.getDocPath();//获取document目录
String file = docPath + '/' + Application.util.guid() + extension(url);//本地文件名
Response response = await dio.download(url, file,
onReceiveProgress: progressCallback == null
? null
: (int count, int total) {
if (total == -1) {
//不知道进度的默认50%
total = count * 2;
}
progressCallback(count, total, cancelToken);
},
cancelToken: cancelToken);
response.extra = <String, dynamic>{"localPath": file};
return response;
}
//文件上传
//url - 上传的地址
//filePath - 本地文件路径
//progressCallback - 上传进度变化时的回调,用来实现进度条
Future<Response> dioUpload(String url, String filePath,
{Map<String, String> headers = const {}, Map<String, String> body = const {}, Function progressCallback}) async {
Map<String, dynamic> data = Map.of(body);
//print(basename(filePath));
data['uploadFile'] = await MultipartFile.fromFile(filePath, filename: basename(filePath), contentType: Request.getMediaType(extension(filePath)));
FormData formData = FormData.fromMap(data);//form data上传文件
Dio dio = new Dio();
CancelToken cancelToken = CancelToken();
Response resp = await dio.post(url, data: formData, options: Options(headers: headers), onSendProgress: (int count, int data) {
progressCallback(count, data, cancelToken);
});
if (resp.statusCode == 200) {
return resp;
} else {
throw new Exception("网络访问错误");
}
}