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

如何将Django接收的WebM音频字节转换为MP3文件并保存

问题分析与解决方案

首先先修正你现有代码里的两个核心问题:

  • 直接读取request.body是错误的,FormData上传的文件必须从request.FILES中获取
  • 连续调用两次audio.read()会导致第二次读取为空(第一次读完后文件指针移到末尾),这也是你注释部分保存失败的原因

以下是完整的实现步骤:

1. 安装依赖

要实现webm转MP3,需要用到pydub库,它依赖系统级的ffmpeg工具:

  • Linux:执行sudo apt install ffmpeg
  • macOS:执行brew install ffmpeg
  • Windows:从ffmpeg官网下载安装包,将其添加到系统PATH中

然后安装Python库:

pip install pydub

2. 修改Django视图代码

替换原有的get_audio函数,使用正确的文件获取方式,并完成格式转换与保存:

import os
from django.conf import settings
from django.http import HttpResponse
from pydub import AudioSegment

def get_audio(request):
    # 从FormData中获取上传的webm音频文件
    audio_file = request.FILES.get('audio_5sec')
    if not audio_file:
        return HttpResponse("未上传音频文件", status=400)
    
    # 加载webm格式音频
    webm_audio = AudioSegment.from_file(audio_file, format="webm")
    
    # 构造保存路径(基于项目根目录的data文件夹)
    save_dir = os.path.join(settings.BASE_DIR, 'data')
    os.makedirs(save_dir, exist_ok=True)  # 自动创建文件夹,已存在则不报错
    save_path = os.path.join(save_dir, 'audio.mp3')
    
    # 转换为MP3并保存
    webm_audio.export(save_path, format="mp3")
    
    return HttpResponse("音频转换并保存成功")

3. 额外注意事项

  • 前端代码无需修改,但可以在上传前打印blobAudio.type确认是audio/webm格式
  • 确保Django运行进程拥有data文件夹的写入权限
  • 如果需要批量保存(避免覆盖),可以给文件名加上时间戳或随机后缀

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:32:55