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

如何在Aiogram中自定义文件名保存音频?

如何自定义文件名保存Discord音频附件

我来帮你解决这个问题!你当前的代码有两个关键问题导致文件名不对、保存失败:

问题分析

  1. 错误的文件打开模式:你用了文本模式'w'来写入音频这种二进制数据,这会导致数据损坏或保存异常,必须用二进制写入模式'wb'。
  2. 对download()返回值的处理错误:await message.audio.download()返回的是一个BytesIO流对象,不是直接的字节内容,直接写入会导致不符合预期的结果。

两种正确的解决方法

方法1:直接让download()方法处理保存(最简洁)

Discord的音频附件对象自带的download()方法支持直接指定文件名,不需要手动打开文件:

await message.audio.download(filename='audio.mp3')

执行这一行代码后,音频就会直接保存为当前目录下的audio.mp3,完全不需要自己处理文件流操作。

方法2:手动处理二进制流(适合需要额外处理数据的场景)

如果你需要先对音频数据做一些操作再保存,可以这样写:

# 获取音频流对象
audio_stream = await message.audio.download()
# 以二进制写入模式打开文件
with open('audio.mp3', 'wb') as audio_file:
    # 读取流中的二进制数据并写入文件
    audio_file.write(audio_stream.read())

为什么之前的代码会生成奇怪的文件内容?

你之前的代码用文本模式写入BytesIO对象的字符串表示,而不是实际的音频二进制数据,所以才会出现类似music\n----file_1.mp3这种非预期内容。换成二进制模式并正确读取流数据后,就能正常保存音频文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:10:30