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
相关产品推荐
相关产品推荐

