如何使用Flask打开下载对话框?

时间:2016-06-29 10:51:09

标签: javascript python html flask text-to-speech

我试图让用户在使用gTTS进行文本到语音转换后下载mp3文件。出现闪存消息,但下载对话框无法打开。

这是Python代码:

def mytts():
    if request.method == 'POST':
        if not request.form['text']:
            flash('Text needed to proceed', 'error')
        else:
            text_input = request.form['text']
            tts = gTTS(text=text_input, lang='en')
            f=TemporaryFile()
            tts.write_to_fp(f)
            flask.send_file(f,as_attachment=True,attachment_filename="MyTTSOutput.mp3", mimetype="audio/mpeg")
            f.close()
            flash('Successful Text-to-Speech Convert')
            return redirect(url_for('mytts'))
    return render_template('mytts.html')

HTML代码(仅限表单部分):

    <form action="" method=post class="form-horizontal">
        <h2>Convert Text To Speech</h2>
    <div class="control-group">
        <div class="controls">
          <textarea name="text" rows=10 class="input-xlarge" placeholder="Enter text to be converted here" required>{{ request.form.text }}</textarea>
        </div>
    </div>
      <div class="control-group">
        <div class="controls">
          <button type="submit" class="btn btn-success">CONVERT!</button>
          <a href="{{ url_for('index') }}"><button type="button" class="btn btn-info">HOME</button></a>

        </div>
    </div>
  </form>

请帮忙。

1 个答案:

答案 0 :(得分:1)

您需要返回send_file的结果。它生成一个响应对象,如果从视图函数返回,Flask只能对该对象执行某些操作。

with TemporaryFile() as f:
    tts.write_to_fp(f)
    return send_file(f, as_attachment=True, attachment_filename="tts.mp3")