我使用Pyramid和ZODB作为数据库存储。我想返回视频回复,我能够但唯一的问题是浏览器下载整个视频,然后播放它,我不希望这种情况发生。我想流视频,但我找不到任何合适的解决方案。 这是我的代码
返回视频回复的功能是:
@view_config(context=Content, name='getcontentplay')
def getContentImage(context,request):
blob = context.blobdata
resp = Response(content_disposition="inline; filename=\""+blob.filename.encode('utf-8')+"\"",content_type=blob.contentType,)
resp.app_iter = blob.data
resp.content_length = blob.size
return resp
Blob存储类是:
from ZODB.blob import Blob
from persistent import Persistent
class BlobWrapper(Persistent):
def __init__(self, filedata,contentType,filename):
self.contentType = contentType
self._blob = Blob(filedata)
self.filename = filename
def _getData(self):
fp = self._blob.open('r')
data = fp.read()
fp.close()
return data
def retFile(self):
return self._blob.open('r')
data = property(_getData)
@property
def size(self):
if 'size' in self.__dict__:
return self.__dict__['size']
reader = self._blob.open()
reader.seek(0,2)
size = int(reader.tell())
reader.seek(0)
reader.close()
self.__dict__['size'] = size
return size
def getSize(self):
return self.size
我的HTML模板代码是
<video poster="/static/images/kid.png" controls controlsList="nodownload" preload="none">
<source src="${urltovideo}" />
</video>
&#13;
答案 0 :(得分:0)
您正在询问如何获取分块/流式响应,其详细信息完全取决于您的wsgi服务器以及wsgi服务器和客户端浏览器之间的任何其他服务器/代理。例如,默认情况下,nginx会在将响应发送到客户端之前缓冲来自其上游的整个响应。此外,许多WSGI服务器也会在一定程度上执行相同操作,您需要查看其设置以了解如何调整缓冲。