我构建了一个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>
答案 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模型。希望这会有所帮助。