我正在尝试用cherrypy流式传输一个视频文件。当我去本地主机:8080/流?视频=视频.avi它开始下载,但是几秒钟后,不管文件有多大,它都会“完成”下载。我对这件事相当陌生,不知道它为什么这么做。另外,如果文件是Matroska(.mkv),为什么它甚至不能识别它?在
这是我的流课程:
class Stream(object):
@cherrypy.expose
def default(self, video=None):
BASE_PATH = ".."
video = os.path.join(BASE_PATH, video)
if video == None:
return "no file specified!"
if not os.path.exists(video):
return "file not found!"
f = open(video)
size = os.path.getsize(video)
mime = mimetypes.guess_type(video)[0]
print(mime)
cherrypy.response.headers["Content-Type"] = mime
cherrypy.response.headers["Content-Disposition"] = 'attachment; filename="%s"' % os.path.basename(video)
cherrypy.response.headers["Content-Length"] = size
BUF_SIZE = 1024 * 5
def stream():
data = f.read(BUF_SIZE)
while len(data) > 0:
yield data
data = f.read(BUF_SIZE)
return stream()
default._cp_config = {'response.stream': True}
我意识到我需要做的就是将open(video)更改为open(video,'rb'),这样它就可以以二进制模式读取文件。在那之后,文件完全下载并运行。在
相关问题 更多 >
编程相关推荐