отправлять данные с сервера javascript на сервер python - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь записать звук с JavaScript и отправить его на сервер Python. На данный момент я запустил его, и запись работает отлично. Используя AJAX для отправки и получения данных, я пытаюсь передать их, но не получается отправить на Python.

Вот мой код:

JavaScript :

function submit(blob) {
  var reader = new window.FileReader();
  reader.readAsDataURL(blob);
  reader.onloadend = function() {
    var fd = new FormData();
    base64data = reader.result;
    console.log(base64data);
    fd.append('file', base64data, 'audio.ogg');
    $.ajax({
      type: 'POST',
      url: '/',
      data: fd,
      cache: false,
      processData: false,
      contentType: false,
      enctype: 'multipart/form-data'
    }).done(function(data) {
      console.log(data);
    });
  }

Python Сервер:

from flask import Flask, render_template, request

    app = Flask(__name__)

    @app.route('/')

    def home():

        return render_template("index.html")

     @app.route('/', methods=['POST', 'GET'])
     def get_data():
             with open('./audio.ogg', 'wb') as f:
                 f.write(request.data)
             f.close()
             print("FILE CLOSED")
             return render_template("index.html")

    if __name__ == '__main__':

      app.run(debug=True)

1 Ответ

0 голосов
/ 09 марта 2020

В вашем JavaScript вы пытаетесь отправить строку в виде файла, вы должны отправлять файл / BLOB-объект.
См. Ниже

function submit(blob) {
    var fd = new FormData();
    fd.append('file', blob, 'audio.ogg');
    $.ajax({
      type: 'POST',
      url: '/',
      data: fd,
      cache: false,
      processData: false,
      contentType: false
    }).done(function(data) {
      console.log(data);
    });
}

В своем коде на стороне сервера вы должны используйте request.files для доступа к загруженным файлам.

from flask import Flask, render_template, request

    app = Flask(__name__)

    @app.route('/')

    def home():

        return render_template("index.html")

     @app.route('/', methods=['POST', 'GET'])
     def get_data():
             request.files["file"].save('./audio.ogg')
             print("FILE CLOSED")
             return render_template("index.html")

    if __name__ == '__main__':

      app.run(debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...