1

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

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

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

4

3 回答 3

3

从研究http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py我不得不说,不:该serve_file功能是“单片的”,并且它自己的bodyfile = open(path, 'rb'),似乎也没有任何替代方式。可惜,因为很容易重构函数并添加另一个例如serve_open_file来覆盖您的情况,同时将两者都委托给“硬”逻辑的内部函数,例如多部分/字节范围服务。可能值得您在cherrypy.org 上打开一个功能请求(“增强票证”)——可能不是一个杀手级功能,但我可以看到用例,并且实施它对于cherrypy 的人来说并不难(访问他们的网站并按照页面上的说明“登录”到它)。

于 2009-05-31T21:41:22.147 回答
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,它可以为您做更多的事情。

于 2011-09-12T17:05:18.193 回答
0

重新审视http://www.cherrypy.org/browser/trunk/cherrypy/lib/static.py,它看起来serve_fileobj正是您想要的。

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

于 2011-09-08T19:58:28.440 回答