用烧瓶播放下载的视频

时间:2015-12-12 01:07:48

标签: python web flask static-files pafy

我有一个简单的烧瓶服务器。我使用pafy从用户提供的youtube链接下载了一段视频。

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

basic.html模板有一个提交下载动作的表单:

<form action="download_vid" method="post">
Link: <input type="text" name="download_path"><br>
<input type="submit" value="Submit">
</form>

我有另一个终点,/ download_vid看起来像这样。

@app.route('/download_vid', methods=['POST'])
def download_vid():
    url = request.form['download_path']
    v = pafy.new(url)
    s = v.allstreams[len(v.allstreams)-1]
    filename = s.download("static/test.mp4")
    return redirect(url_for('done'))

确实将所需的链接下载为静态文件夹中的.mp4文件。我可以观看它,如果我在本地打开它,我也可以将它用作HTML文件中标记的来源。

@app.route('/done')
def done():
    return app.send_static_file('test.mp4')

根据我的理解,'send_static_file'提供静态目录中的文件。但是,当我运行服务器时,我收到404错误,即使视频显然在那里。

我也为done()尝试了不同的版本:

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

这里,vid.html驻留在模板中,并具有static / test.mp4的硬编码路径。下载完成后加载。在这种情况下我没有404错误,但标签没有做任何事情,它只是灰色。如果我在本地打开vid.html(双击它),它就会起作用,它会显示视频。

你能帮我理解发生了什么吗?

我想要实现的目标是:

  1. 从用户[完成]
  2. 获取输入
  3. 使用该输入下载视频[完成]
  4. 将该视频发送回用户[??? ]

1 个答案:

答案 0 :(得分:2)

我认为你有文件路径或文件权限。

  • 视频是否已下载到static目录中?
  • static目录与您的main.py文件一起位于同一目录中吗?
  • 您的烧瓶应用程序是否有权读取文件?

我认为您的文件未在html模板中加载的原因是因为您从网址static/test.mp4将其引用为/done,将视频路径转换为/done/static/test.mp4

您可以重定向到实际的媒体文件,而不是尝试使用Flask推送文件。

@app.route('/done')
def done():
    return redirect('/static/test.mp4')