flutter dio 上传 下载 进展

//文件下载
//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("网络访问错误");
  }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值