FLASK - сервер не смог понять запрос (загрузка аудиофайла) - PullRequest
1 голос
/ 19 июня 2020

Я создал приложение 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)

загрузка. 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 голосов
/ 19 июня 2020

Вы пытаетесь передать объект 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 своей модели машинного обучения. Надеюсь, это поможет.

0 голосов
/ 19 июня 2020

Поскольку ваша функция прогнозирования получает запросы GET и POST, вам нужно обрабатывать каждый случай отдельно. Поскольку при получении запроса GET у вас нет request.form.

Я бы посоветовал вам добавить условие в вашу функцию.

def prediction():
        if request.method == 'POST':
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...