uploadFile<T> method

Future<Response<T>> uploadFile<T>({
  1. required String path,
  2. dynamic file,
  3. String fieldName = 'file',
  4. String? fileName,
  5. String? contentType,
  6. Map<String, dynamic>? additionalData,
  7. Map<String, dynamic>? queryParameters,
  8. void onProgress(
    1. int sent,
    2. int total
    )?,
  9. CancelToken? cancelToken,
  10. Map<String, String>? headers,
})

上传单个文件

path 请求路径 file 文件对象(File、String 路径或 Uint8List 字节数组) fieldName 表单字段名(默认 'file') fileName 文件名(可选,如果不提供则自动提取) contentType Content-Type(可选,如果不提供则自动推断) additionalData 额外的表单数据(除了文件之外的其他字段) queryParameters URL 查询参数 onProgress 上传进度回调 (已上传字节数, 总字节数) cancelToken 取消令牌 headers 特定请求的请求头(可选),会与全局请求头合并,如果键相同则覆盖全局请求头

示例:

final response = await http.uploadFile<String>(
  path: '/api/upload',
  file: File('/path/to/image.jpg'),
  fieldName: 'avatar',
  additionalData: {'userId': '123'},
  headers: {'X-Upload-Type': 'avatar'}, // 特定请求头
  onProgress: (sent, total) {
    print('上传进度: ${(sent / total * 100).toStringAsFixed(1)}%');
  },
);

Implementation

Future<Response<T>> uploadFile<T>({
  required String path,
  dynamic file,
  String fieldName = 'file',
  String? fileName,
  String? contentType,
  Map<String, dynamic>? additionalData,
  Map<String, dynamic>? queryParameters,
  void Function(int sent, int total)? onProgress,
  dio_package.CancelToken? cancelToken,
  Map<String, String>? headers,
}) async {
  // 将 file 参数转换为 UploadFile
  UploadFile uploadFile;
  if (file is File) {
    uploadFile = UploadFile(
      file: file,
      fieldName: fieldName,
      fileName: fileName,
      contentType: contentType,
    );
  } else if (file is String) {
    uploadFile = UploadFile(
      filePath: file,
      fieldName: fieldName,
      fileName: fileName,
      contentType: contentType,
    );
  } else if (file is Uint8List) {
    uploadFile = UploadFile(
      fileBytes: file,
      fieldName: fieldName,
      fileName: fileName,
      contentType: contentType,
    );
  } else {
    throw ArgumentError('file 参数必须是 File、String 或 Uint8List 类型');
  }

  return uploadFiles<T>(
    path: path,
    files: [uploadFile],
    additionalData: additionalData,
    queryParameters: queryParameters,
    onProgress: onProgress,
    cancelToken: cancelToken,
    headers: headers,
  );
}