【问题标题】:FLASK - server could not understand request (uploading audio file)FLASK - 服务器无法理解请求(上传音频文件)
【发布时间】:2020-10-09 12:50:47
【问题描述】:

我构建了一个烧瓶应用程序,能够将音频(.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)

上传.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>

【问题讨论】:

    标签: python flask request


    【解决方案1】:

    您正在尝试将 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 模型。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-10-20
        • 2017-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多