在cherrypy.lib.static.py中有一个方法:
serve_file(path, content_type=None, disposition=None, name=None)
其中参数“path”必须是真实文件(绝对路径)。是否有类似的服务任何Python文件对象?
答案 0 :(得分:3)
从学习http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py我不得不说,不,serve_file
函数是“单片”,并且自己做bodyfile = open(path, 'rb')
,也没有任何替代方法。可惜,因为很容易重构函数并添加另一个例如serve_open_file
覆盖你的情况,同时委托内部函数用于“硬”逻辑,例如multipart / byteranges服务。在cherrypy.org上打开一个功能请求(“增强票”)可能是值得的 - 可能不是一个杀手级功能,但我可以看到用例,并且实现它对于樱桃人来说并不难(访问{ {3}}并按照页面上的说明“登录”。)
答案 1 :(得分:2)
只要您的文件或类文件对象是可迭代的,只需从处理函数而不是字符串中返回它。
<强>更新强>
要将其作为下载服务,请按以下方式设置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
功能,这样可以为您提供此功能。
答案 2 :(得分:0)
重新审视http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py,看起来serve_fileobj
完全符合您的要求。
编辑:我现在尝试了这个,它只将文件内容呈现到屏幕上,而不是允许下载文件。