【问题标题】:send post data from javascript to python server将 post 数据从 javascript 发送到 python 服务器
【发布时间】:2020-03-09 14:24:13
【问题描述】:

我正在尝试使用 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)

【问题讨论】:

    标签: javascript python ajax server


    【解决方案1】:

    在您的 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)
    

    【讨论】:

    • 也许我的问题不是那么具体......当录制完成并播放音频......它没有向 python 服务器返回一些东西......也许它与我的 html 文件有关?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 2012-04-03
    • 2018-05-07
    • 2017-11-16
    • 1970-01-01
    相关资源
    最近更新 更多