我有一个简单的烧瓶服务器。我使用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(双击它),它就会起作用,它会显示视频。
你能帮我理解发生了什么吗?
我想要实现的目标是:
答案 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')