cherrypy - 提供静态文件和强制内容类型

时间:2014-08-07 08:24:55

标签: python http cherrypy

我正在构建一个带有cherrypy的小型网络应用程序。

在这个应用程序中,我需要以两种不同的方式提供文件:

  1. 使用正确的mime类型提供服务,将其嵌入网页
  2. application/octet-stream mime类型提供,以强制下载。
  3. 目前,我添加了一个公开的方法来传输文件,一个在/document/xx,返回正确的mime类型,另一个在/download/xx使用八位字节流mime类型。

    但我想避免自己编码。它只会带来错误和安全问题。

    tl;博士:如何强迫cherrypy的tools.staticdir强行下载?

    在github上查看应用程序的完整代码:https://github.com/aspyct/docrepo(请注意,它仍然使用旧的'config.ini'文件,没有配置字典。)

1 个答案:

答案 0 :(得分:3)

您可以通过向工具提供content_types来强制它,将文件扩展名映射到MIME类型。像这样。

#!/usr/bin/env python
# -*- coding: utf-8 -*-


import os

import cherrypy


path   = os.path.abspath(os.path.dirname(__file__))
config = {
  'global' : {
    'server.socket_host' : '127.0.0.1',
    'server.socket_port' : 8080,
    'server.thread_pool' : 8
  },
  '/static' : {
    'tools.staticdir.on'            : True,
    'tools.staticdir.dir'           : os.path.join(path, 'static'),
    'tools.staticdir.content_types' : {'html': 'application/octet-stream'}
  }
}


if __name__ == '__main__':
  cherrypy.quickstart(config = config)

如果您事先不知道扩展程序,请查看该工具的source code。只有二​​十几条有效的代码行。只需制作自己的微调工具即可。