如何读取/处理通过 POST 请求发送到 Flask API 的音频文件?

Kau*_*dra 4 python audio http flask python-requests

我正在运行一个简单的 Flask 后端,它将处理带有音频文件的 HTTP 请求并读取数据。最终,我想读取数据并让 ML 模型对音频数据进行推理,但第一步是简单地以正确的编码格式读取数据。

我的 Flask 应用程序代码如下:

@app.route('/api/audio', methods=['GET', 'POST'])
def get_score():
    if request.method == 'POST':
        length = request.content_length
        content_type = request.content_type
        data = request.data
        return f"""Content Type is  {content_type} and data is {data} \n length is {length}"""
    elif request.method == 'GET':
        return 'get method received'
Run Code Online (Sandbox Code Playgroud)

我在客户端生成 POST 请求的测试代码如下:

def send_audio():
    #print('attempting to send audio')
    url = 'http://127.0.0.1:5000/api/audio'
    with open('/Users/kaushikandra/laughter-detection/LaughDetection/crowd_laugh_1.wav', 'rb') as file:
        data = {'uuid':'-jx-1', 'alarmType':1, 'timeDuration':10}
        files = {'messageFile': file}

        req = requests.post(url, files=files, json=data)
        print(req.status_code)
        print(req.text)
Run Code Online (Sandbox Code Playgroud)

当我运行客户端脚本时,我从服务器获得以下输出。

200
Content Type is  multipart/form-data; boundary=d95c72e01bdfac029b16da2b8f144cbd and data is b'' 
 length is 129722
Run Code Online (Sandbox Code Playgroud)

我可以从 200 状态代码中看到 Flask 应用程序正确接收 POST 请求,但是当我尝试读取数据时,我得到一个空的 b'' 字符串。使用什么方法来解码音频文件的正确方法是什么?或者是我在客户端脚本中发送 POST 请求的方式有问题?

我查看了 StackOverflow 上的其他问题,他们提到将文件作为 POST 请求中“文件”参数的一部分发送。

and*_*sit 5

尝试使用request.files获取您的音频文件:

@app.route('/api/audio', methods=['GET', 'POST'])
def get_score():
    if request.method == 'POST':
         request.files['messageFile']
Run Code Online (Sandbox Code Playgroud)

如果我记得的话,request.data也只是一个空字符串。使用request.json()request.get_json(force=True).