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

Flask应用接收POST请求的音频文件损坏问题排查

问题定位与修复

问题出在接收端代码,原因是调用input_file.save()前执行了input_file.read(),这会把文件对象的读取指针移到末尾,后续save()只能从末尾开始写入,导致保存的文件内容不完整或为空,最终损坏无法播放。

修复方案(二选一即可)

方案1:读取内容后重置文件指针

在input_file.read()后添加seek(0)将指针移回文件开头,再执行保存:

@app.route('/predict', methods=['GET','POST'])
def get_speech_to_text_conversion():
    input_file = request.files["file"]
    input_data = input_file.read()
    print("input data:", input_data)
    # 重置文件指针到开头
    input_file.seek(0)
    file_name = f'C:/Users/Aris/Documents/Voice_to_Text/User_Input/{input_file.filename}'
    input_file.save(file_name)
    dataset = load_dataset("audiofolder", data_files=file_name, split="train")

方案2:直接保存文件,跳过提前读取(若不需要input_data)

如果业务逻辑不需要提前读取input_data,可直接调用save(),避免指针移动问题:

@app.route('/predict', methods=['GET','POST'])
def get_speech_to_text_conversion():
    input_file = request.files["file"]
    file_name = f'C:/Users/Aris/Documents/Voice_to_Text/User_Input/{input_file.filename}'
    input_file.save(file_name)
    # 若需读取内容,可在save后操作,或读之前执行input_file.seek(0)
    # input_data = input_file.read()
    # print("input data:", input_data)
    dataset = load_dataset("audiofolder", data_files=file_name, split="train")

发送端代码无问题,requests.post的files参数传递正确,文件以二进制模式打开符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:22:37