You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何使用Dio将flutter_sound录制的音频上传至服务端

Flutter 端使用 Dio 上传 flutter_sound 录制音频到 Django 后端实现方案

前置校验项

  • 确认 flutter_sound 录制输出的音频格式,推荐选择 aac/mp3 这类通用兼容格式,避免后端解析异常
  • 确认 Django 后端接收音频的字段名、请求规则(默认用 POST + multipart/form-data 格式)、单文件最大上传限制
  • 确认接口鉴权规则,提前拿到合法的请求凭证

Flutter 端实现代码

1. 引入依赖

确保 pubspec.yaml 中已引入核心依赖:

dependencies:
  flutter:
    sdk: flutter
  dio: ^5.4.0
  flutter_sound: ^9.2.13
  http_parser: ^4.0.2 # 用于指定音频content-type

2. 音频上传逻辑实现

录制完成后拿到音频文件路径,构造 Multipart 请求上传:

import 'dart:io';
import 'package:dio/dio.dart';
import 'package:http_parser/http_parser.dart';

Future<bool> uploadAudio(String audioFilePath, String userId, String sessionId) async {
  final dio = Dio();
  final audioFile = File(audioFilePath);
  
  try {
    // 构造FormData,字段名需和Django后端定义完全一致
    final formData = FormData.fromMap({
      "audio": await MultipartFile.fromFile(
        audioFile.path,
        filename: "record_${DateTime.now().millisecondsSinceEpoch}.aac",
        // 与录制的音频格式匹配,此处示例为aac格式
        contentType: MediaType('audio', 'aac'),
      ),
      "user_id": userId,
      "session_id": sessionId
    });

    // 发起上传请求
    final response = await dio.post(
      "你的Django接口地址",
      data: formData,
      // 按需添加请求头,比如鉴权token
      options: Options(
        headers: {
          "Authorization": "Bearer 你的用户鉴权Token",
        },
      ),
      // 可选:添加上传进度回调
      onSendProgress: (sent, total) {
        if (total > 0) {
          print("上传进度:${(sent / total * 100).toStringAsFixed(0)}%");
        }
      },
    );

    return response.statusCode == 200 || response.statusCode == 201;
  } on DioException catch (e) {
    print("上传失败原因:${e.response?.data ?? e.message}");
    return false;
  }
}

Django 后端适配检查(已完成开发可直接校验对应配置)

  • 确认 settings.py 中配置的 FILE_UPLOAD_MAX_MEMORY_SIZE 大于音频文件最大允许大小,允许的上传后缀包含你使用的音频格式
  • DRF 接口需配置解析器支持 multipart 格式:parser_classes = [MultiPartParser, FormParser]
  • 序列化器接收音频的字段需使用 FileField 或 AudioFileField,按需添加格式、大小校验规则

常见问题排查

  • 接口返回400:优先检查FormData字段名是否和后端一致、请求头是否符合要求、音频大小是否超出后端限制
  • 接口返回500:检查后端文件存储目录是否有写入权限、存储逻辑是否有异常
  • 上传后音频无法播放:确认前后端音频编码格式统一,录制时的采样率、比特率参数与后端解码参数匹配

内容的提问来源于stack exchange,提问作者Arif Haidari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 12:06:02