在cherrypy.lib.static.py 中有一个方法:
serve_file(path, content_type=None, disposition=None, name=None)
其中参数“path”必须是真实文件(绝对路径)。是否有类似的东西可以为任何 Python 文件对象提供服务?
在cherrypy.lib.static.py 中有一个方法:
serve_file(path, content_type=None, disposition=None, name=None)
其中参数“path”必须是真实文件(绝对路径)。是否有类似的东西可以为任何 Python 文件对象提供服务?
从研究http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py我不得不说,不:该serve_file
功能是“单片的”,并且它自己的bodyfile = open(path, 'rb')
,似乎也没有任何替代方式。可惜,因为很容易重构函数并添加另一个例如serve_open_file
来覆盖您的情况,同时将两者都委托给“硬”逻辑的内部函数,例如多部分/字节范围服务。可能值得您在cherrypy.org 上打开一个功能请求(“增强票证”)——可能不是一个杀手级功能,但我可以看到用例,并且实施它对于cherrypy 的人来说并不难(访问他们的网站并按照页面上的说明“登录”到它)。
只要您的文件或类似文件的对象是可迭代的,只需从处理函数返回它而不是字符串。
更新:
要将其用作下载,请设置 Content-Type 和 Content-Disposition 标头,如下所示:
cherrypy.response.headers["Content-Type"] = "application/x-download"
cd = 'attachment; filename="%s"' % name
cherrypy.response.headers["Content-Disposition"] = cd
或者,使用serve_fileobj
最新版本中的功能cherrypy/lib/static.py
,它可以为您做更多的事情。
重新审视http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py,它看起来serve_fileobj
正是您想要的。
编辑:我现在已经尝试过了,它只将文件内容呈现到屏幕上,而不是允许下载文件。