serve_file用于任何文件对象

时间:2009-05-31 21:24:02

标签: cherrypy

在cherrypy.lib.static.py中有一个方法:

  serve_file(path, content_type=None, disposition=None, name=None)

其中参数“path”必须是真实文件(绝对路径)。是否有类似的服务任何Python文件对象?

3 个答案:

答案 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完全符合您的要求。

编辑:我现在尝试了这个,它只将文件内容呈现到屏幕上,而不是允许下载文件。