如何使 Flask 流成为带有 HTTP 206 部分内容的静态文件?

Und*_*ryx 5 python google-chrome http werkzeug flask

我想在由 Flask 提供支持的网站上使用循环视频。显然,Chrome 不会循环播放视频,除非它是通过返回的 HTTP 206 代码流式传输的。然而,Flask 总是返回带有 HTTP 200 的静态文件。如何从我的 Flask 项目(托管在 Heroku 上,作为记录)流式传输静态内容以使视频在 Chrome 中正确循环?

se7*_*7en 8

我在提供视频文件时遇到了同样的问题,我通过深入研究Werkzeug. 我通过conditional=Truesend_from_directory函数中添加标志来解决它,如下所示:

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    """Endpoint to serve uploaded videos

    Use `conditional=True` in order to support range requests necessary for
    seeking videos.

    """
    return send_from_directory(app.config['UPLOAD_FOLDER'], filename,
                               conditional=True)
Run Code Online (Sandbox Code Playgroud)


tsa*_*oth 1

Flask 中的响应对象有一个可以传递的“status_code”参数。有关更多详细信息,请参阅此文档,但本质上,您可能希望对 Response 对象进行子类化。

另请查看make_response() - 它可能会揭示一种更简单的方法,具体取决于您的应用程序结构。

查看流模式以了解更多详细信息,但它适合生成内容而不是静态内容。