如何简单地将当前目录中的mp3发送给用户? JavaScript/Flask

问题描述 投票:0回答:1

我有这个 Flask 后端,将来它将根据用户请求动态生成 mp3 文件,但目前它只是一种路由函数的方法。

我面临的问题是,当用户进入前端时,他们会单击一个按钮进行下载,这可以正常工作并且可以正确下载文件。但当它下载时,由于某种原因,它会将文件转换为 mp4 格式,并且音频质量很糟糕(例如低沉且压缩的声音)。我想知道这是浏览器问题还是其他问题。我想知道为什么前端将其转换为mp4以及为什么音频质量很差。

这是我的烧瓶后端代码

from flask import Flask, send_file, render_template
import os

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/run-python', methods=['GET'])
def run_python():
    # Define the file path
    file_path = os.path.join('static', 'test_file.mp3')
    
    # Check if the file exists
    if os.path.exists(file_path):
        # Send the file
        return send_file(file_path, as_attachment=True, mimetype='audio/mpeg', download_name='test_file.mp3')
    else:
        return "File not found", 404

if __name__ == '__main__':
    app.run(debug=True)

这是我的index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Run Python Example</title>
    </head>
    <body>
        <h1>Run Python Code</h1>
        <button id="runPythonButton">Download File</button>

        <script>
            document.getElementById('runPythonButton').addEventListener('click', function() {
                // Open the file in a new tab or prompt the download
                window.location.href = '/run-python';
            });
        </script>
    </body>
    </html>

我在 static/test_file.mp3 中有 mp3

当我在这里播放歌曲时,听起来很完美,但是一旦通过前端下载,文件的音质就很差。

谢谢

尝试了多个文件,但出现同样的错误

javascript python flask audio
1个回答
0
投票

您遇到的 MP3 文件下载为 MP4 且音质较差的问题很可能与下载文件时浏览器处理文件的方式有关。这可能是由于浏览器设置或缓存造成的,或者可能存在 MIME 类型配置错误。您应该确保使用 Flask send_file 函数正确指定 Content-Disposition 和 Content-Type 标头,这必须迫使浏览器提供 Mpeg3 文件,而不是将其更改为任何其他格式,因为您不愿意这样做。此外,在不同的浏览器上测试此功能可能有助于确定问题是否仅与某些特定浏览器有关。

© www.soinside.com 2019 - 2024. All rights reserved.