如何让Flask以HTTP 206部分内容流式传输静态文件?
我想在一个用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)