cherrypy - обслуживать статические файлы и принудительно использовать тип контента

Я создаю небольшое веб-приложение с помощью cherrypy.

В этом приложении мне нужно обслуживать файлы двумя разными способами:

  1. подавайте его с правильным типом пантомимы, чтобы встроить его в веб-страницу,
  2. подайте его с типом mime application/octet-stream, чтобы принудительно загрузить.

В настоящее время я добавил открытый метод к потоковым файлам, один в /document/xx, возвращающий правильный тип mime, другой в /download/xx с типом mime-октета.

Но я хочу избежать кодирования этого самостоятельно. Это может принести только ошибки и проблемы с безопасностью.

tl;dr: Как я могу заставить tools.staticdir вишни для принудительной загрузки?

См. полный код приложения на github: https://github.com/aspyct/docrepo (примечание что он по-прежнему использует старый файл «config.ini», без словаря конфигурации).


person aspyct    schedule 07.08.2014    source источник


Ответы (1)


Вы можете сделать это принудительно, предоставив 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)

Если вы не знаете расширение заранее, взгляните на исходный код. Там едва ли две дюжины эффективных строк кода. Просто сделайте свой собственный отлаженный инструмент этой цели.

person saaj    schedule 11.08.2014