使用cherrypy流式文件

2024-04-19 07:24:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用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}

Tags: 文件pathdatastreamsize视频returnos