首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何播放flask send_file发送的音频文件?

如何播放flask send_file发送的音频文件?
EN

Stack Overflow用户
提问于 2021-07-03 03:14:45
回答 1查看 106关注 0票数 1

我正在使用React开发前端,使用Flask开发后端。

我想从Flask服务器向客户端发送一个mp3,然后在浏览器上播放它。

反应

代码语言:javascript
复制
import React from "react";
import axios from "axios";

function App() {

  function handleClick() {
    axios
      .post(`http://localhost:5000/post`, { text: text })
      .then((res) => {
        // to set a audio from server into <audio controls>
      })
      .catch((error) => {console.log("axios error:", error);});
  }

  return (
    <div className="App">
      <button onClick={() => handleClick()}>BUTTON</button>
      <div>
        <audio controls>
          <source src="" type="audio/mpeg" />
        </audio>
      </div>
    </div>
  );
}

export default App;

烧瓶

代码语言:javascript
复制
@app.route('/post', methods=["POST"])
def testpost():
    req = request.get_json(force=True)
    # some process to send a file
    return send_file("test.mp3")
EN

回答 1

Stack Overflow用户

发布于 2021-07-03 18:12:35

为了能够从react应用程序中调用flask应用程序,您首先需要考虑cors。

您可能已经这样做了,但是如果没有,您可以像这样使用Flask-CORS

代码语言:javascript
复制
from flask import Flask, render_template, send_file, Response
from flask_cors import CORS, cross_origin


app = Flask(__name__)
cors = CORS(app)


@app.route("/post", methods=["POST"])
@cross_origin()
def testpost():
    return send_file("audio.mp3", mimetype="audio/mp3")

然后,我们可以在react应用程序中执行以下操作

代码语言:javascript
复制
import React, { useState } from "react";
import axios from "axios";

function App() {
  const [src, setSrc] = useState("");

  function handleClick() {
    axios({
      url: "http://localhost:5000/post",
      method: "post",
      responseType: "blob",
    })
      .then((res) => {
        setSrc(URL.createObjectURL(res.data));
      })
      .catch((error) => {
        console.log("axios error:", error);
      });
  }

  return (
    <div className="App">
      <button onClick={() => handleClick()}>BUTTON</button>
      <div>
        <audio id="audio" controls src={src} />
      </div>
    </div>
  );
}

export default App;

如果您想在按下执行handleClick的按钮后立即播放音频,您可以执行类似document.querySelector('audio').play()的操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68230294

复制
相关文章

相似问题

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