使用dio上传文件

在Flutter开发中,使用dio实现上传文件的功能:
import 'dart:io';
import 'dart:typed_data';
import 'package:dio/dio.dart';

Future<Response<dynamic>> requestUploadFile(filePath) async {
  Dio dio = Dio();
  File file = File(filePath);
  Uint8List bytes = await file.readAsBytes();
  Stream<List<int>> stream = MultipartFile.fromBytes(bytes).finalize();

  Response<dynamic> response = await dio.put(
    'https://xxxxxx.com/upload',
    data: stream,
    options: Options(
      contentType: mimeType,
      headers: {
        'content-length': (await file.length()).toString()
      }
    )
  );

  return response;
}
由于dio会将请求转换成String类型,所以需要将Uint8List类型转换成Stream<List<int>>类型。具体请参考dio的issues,这块算是一个小坑吧。