FLASK-服务器无法理解请求(正在上传音频文件)

时间:2020-06-19 09:33:05

标签: python flask request

我构建了一个flask应用程序,能够将音频(.wav,mp3)文件发送到ML模型并据此做出预测。问题是request.files无法正常工作。 “浏览器或代理发送了该服务器无法理解的请求”。

有人知道什么缺失/错误吗?

Flask应用程序:

@app.route('/')
def upload_file():
    return render_template('upload.html')

@app.route("/prediction", methods=["GET","POST"])
def prediction():
    file = request.files['file']
    image = create_spectogram(file)
    pred = predict(model, image)
    result = create_result(pred)
    return jsonify(result)

upload.html:

<html>
   <body>
      <form action = "http://localhost:5000/prediction" method = "POST" 
         enctype = "multipart/form-data">
         <input type = "file" name = "file" />
         <input type = "submit"/>
      </form>
   </body>
</html>

2 个答案:

答案 0 :(得分:0)

由于预测函数同时接收GET和POST请求,因此必须分别处理每种情况。由于收到GET请求时您没有request.form

我建议您在函数中添加一个条件。

def prediction():
        if request.method == 'POST':

答案 1 :(得分:0)

您正在尝试将FileStorage对象传递给模型。 您必须将文件存储在某个地方以便可以使用。

from werkzeug.utils import secure_filename
app.config['IMAGE_UPLOADS'] = '/path/'

file = request.files['file']
filename = secure_filename(file.filename)
file.save(os.path.join(app.config["IMAGE_UPLOADS"], filename))

现在使用文件名作为路径来显示您想要使用的实际文件。

actual_file = 'path/' + filename

您可以将Actual_file传递到ML模型。希望这会有所帮助。