.NET 7 API控制器如何接收音频流并返回转换后的Wav流?
音频格式转换API控制器实现方案
修正后的完整代码
public class AudioController : ControllerBase { private readonly ILogger<AudioController> _logger; public AudioController(ILogger<AudioController> logger) { _logger = logger; } [HttpPost] [Route("/opus-to-wav")] public async Task<IActionResult> ConvertOpusToWav() { // 读取请求体中的音频流 using var inputStream = new MemoryStream(); await Request.Body.CopyToAsync(inputStream); inputStream.Position = 0; // 调用转换方法生成WAV流 using var wavStream = WavConverter.ConvertOpusToWav(inputStream); wavStream.Position = 0; // 返回WAV音频响应 return File(wavStream, "audio/wav", "opus-converted.wav"); } [HttpPost] [Route("/aac-to-wav")] public async Task<IActionResult> ConvertAACToWav() { using var inputStream = new MemoryStream(); await Request.Body.CopyToAsync(inputStream); inputStream.Position = 0; using var wavStream = WavConverter.ConvertAACToWav(inputStream); wavStream.Position = 0; return File(wavStream, "audio/wav", "aac-converted.wav"); } }
核心修改点说明
- 获取输入音频流:从
Request.Body读取请求中的原始音频流,复制到MemoryStream后重置位置,保证转换方法能从头读取内容。 - 流资源管理:用
using语句自动释放流资源,避免内存泄漏问题。 - 正确返回音频响应:放弃
Ok(),改用File()方法——这是ASP.NET Core中返回文件流的标准方式,指定MIME类型为audio/wav,同时设置建议的下载文件名。 - 重置流位置:转换前后都要把流的
Position设为0,否则读取操作会从流的末尾开始,导致返回空内容。
如果你的WavConverter提供异步转换方法(比如ConvertOpusToWavAsync),可以把同步调用改成异步,进一步优化性能:
using var wavStream = await WavConverter.ConvertOpusToWavAsync(inputStream);
内容的提问来源于stack exchange,提问作者AlpUygur
相关产品推荐
相关产品推荐

