【问题标题】:Play a downloaded video with flask [duplicate]用烧瓶播放下载的视频[重复]
【发布时间】:2015-12-12 01:07:48
【问题描述】:

我有一个简单的烧瓶服务器。我使用 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. 将该视频返回给用户 [ ??? ]

【问题讨论】:

    标签: python web flask static-files pafy


    【解决方案1】:

    我认为您的文件路径或文件权限有问题。

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

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

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

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

    【讨论】:

    • 你好。感谢你的回答。是的,视频正在下载到静态。是的, static 与我的 main.py 位于同一目录中(我称之为 routes.py )。是的,它有权限。因为它可以在那里写,我假设它也可以读。可以肯定的是,我使用 sudo 运行服务器。尽管如此,还是没有结果。我也试过:app.send_static_file(url_for('static', filename=''test.mp4''))
    • 我尝试了您的建议,但收到此错误:未找到服务器上未找到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。文件显然在那里。它正在工作。
    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 2019-02-22
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多