如何让Flask以HTTP 206部分内容流式传输静态文件?

5 投票
2 回答
5512 浏览
提问于 2025-04-18 08:00

我想在一个用Flask做的网站上使用循环播放的视频。听说Chrome不会自动循环播放视频,除非视频是通过HTTP 206代码来传输的。但是,Flask总是用HTTP 200来返回这个静态文件。那么,我该怎么做才能让我的Flask项目(托管在Heroku上)正确地传输静态内容,让视频在Chrome中循环播放呢?

2 个回答

1

在Flask中,响应对象有一个叫“status_code”的参数,你可以传递这个参数。想了解更多细节,可以查看这份文档,简单来说,你可能需要创建一个响应对象的子类。

另外,可以看看make_response()这个方法——根据你的应用结构,它可能会提供一个更简单的解决方案。

还可以了解一下流式处理模式,这个模式主要是针对动态生成的内容,而不是静态内容。

9

我之前在提供视频文件的时候也遇到过同样的问题。后来我通过查看Werkzeug的源代码找到了解决办法。我在send_from_directory函数中添加了一个标志conditional=True,这样就解决了问题,代码如下:

@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)

撰写回答