首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何读取/处理发送到Flask的POST请求中的音频文件?

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

Stack Overflow用户
提问于 2019-10-22 23:58:45
回答 2查看 6.5K关注 0票数 3

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

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

代码语言:javascript
运行
复制
@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'

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

代码语言:javascript
运行
复制
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)

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

代码语言:javascript
运行
复制
200
Content Type is  multipart/form-data; boundary=d95c72e01bdfac029b16da2b8f144cbd and data is b'' 
 length is 129722

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

我看过关于StackOverflow的其他问题,他们提到要将文件作为POST请求中的“file”参数的一部分发送。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-23 00:48:44

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

代码语言:javascript
运行
复制
@app.route('/api/audio', methods=['GET', 'POST'])
def get_score():
    if request.method == 'POST':
         request.files['messageFile']

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

票数 2
EN

Stack Overflow用户

发布于 2021-07-06 04:52:59

对于那些想保存和处理.wav或任何文件的人,您可以使用FileStorage.save

main.py (水瓶)

代码语言:javascript
运行
复制
@app.route('/predict_with_db', methods=['POST'])
def predictWithDb():
    if request.method == 'POST':
        save_path = os.path.join(dirname, "temp.wav")
        request.files['music_file'].save(save_path)
        #continue processing...

index.html

代码语言:javascript
运行
复制
<input id="music_file" name="music_file" type="file" accept=".mp3,.wav" class="hidden" />

form.js

代码语言:javascript
运行
复制
var formData = new FormData();
const fp1 = $('#music_file').prop('files')[0];
formData.append('music_file', fp1, fp1.name);

$.ajax({
  type: "POST",
  url: "/predict",
  data: formData,
  processData: false,
  contentType: false,
  success: (result) => {
    console.log(result);
  },
  error: (err) => {
    console.log(err);
  }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58513718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档