如何在Aiogram中自定义文件名保存音频?
如何自定义文件名保存Discord音频附件
我来帮你解决这个问题!你当前的代码有两个关键问题导致文件名不对、保存失败:
问题分析
- 错误的文件打开模式:你用了文本模式
'w'来写入音频这种二进制数据,这会导致数据损坏或保存异常,必须用二进制写入模式'wb'。 - 对
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
相关产品推荐
相关产品推荐

