Flutter中如何将无扩展名录音文件转换为MP3并上传至服务器?
Flutter录制音频转MP3并上传服务器解决方案
一、直接录成MP3(最省事的方法)
不用事后转换,直接让flutter_sound录制MP3格式,改两处代码就行:
- 修改初始化录音机的代码,指定MP3格式:
Future initRecorder() async { final status = await Permission.microphone.request(); if (status != PermissionStatus.granted) { context.showSnackbarError(message: 'Permission required'); } // 明确指定录制格式为MP3 await recorder.openRecorder(audioFormat: AudioFormat.mp3); recorder.setSubscriptionDuration(const Duration(milliseconds: 500)); }
- 录制的时候指定Codec和带.mp3后缀的文件名:
Future record() async { await recorder.startRecorder( toFile: 'audio.mp3', // 文件名带.mp3后缀 codec: Codec.mp3, ); }
这样停止录制后得到的audioFile就是标准MP3文件,直接上传就行。
二、已有无扩展名文件转MP3
如果已经录好了无扩展名的音频,用flutter_sound自带的转换功能处理:
先加一个转换方法:
Future<File?> convertToMp3(File inputFile) async { try { final outputPath = '${inputFile.path}.mp3'; await recorder.convertAudio( inputFile.path, outputPath, codec: Codec.mp3, ); return File(outputPath); } catch (e) { print('转MP3失败: $e'); return null; } }
然后在停止录制的方法里调用转换:
Future stop() async { final filePath = await recorder.stopRecorder(); final fileAudio = File(filePath!); // 转换为MP3 final mp3File = await convertToMp3(fileAudio); if (mp3File != null) { audioFile = mp3File; // 可选:删掉原无扩展名文件 await fileAudio.delete(); print('转换后的MP3路径: $audioFile'); } else { audioFile = fileAudio; print('转换失败,用原文件试试'); } }
三、上传时的注意点
上传服务器的时候,要确保:
- 用
multipart/form-data格式提交的话,文件的filename必须带.mp3后缀 - Content-Type要设为
audio/mpeg
比如在你的postGrievance方法里,音频部分应该这么处理:
MultipartFile.fromFile( audioFile!.path, filename: 'recording.mp3', // 强制指定MP3后缀 contentType: MediaType('audio', 'mpeg'), )
内容的提问来源于stack exchange,提问作者Mr.Robot
相关产品推荐
相关产品推荐

