使用cherrypy在运行中提供任意静态内容

时间:2012-06-29 19:12:43

标签: cherrypy

我正在尝试使用cherrypy创建一个媒体服务器,并且无法在配置启动时未设置的任何目录中提供文件。我不想暴露驱动器根目录,我希望在我需要的时候一次公开一个目录。有没有这样做?

这是我当前代码的相关摘要。

@cherrypy.expose
def serve_mp3(self, mp3_path):
    #cherrypy.config.update({"media":{
    #"tools.staticdir.on" : True,
    #"tools.staticdir.root" : "C:\\Documents and Settings\\sdc\\My Documents\\My Music",
    #"tools.staticdir.dir" : "",
    #"tools.staticfile.root" : "C:\\Documents and Settings\\sdc\\My Documents\\My Music"
    #}})
    static_handler = cherrypy.tools.staticdir.handler(section="/media", dir="C:\\Documents and Settings\\sdc\\My Documents\\My Music")
    cherrypy.tree.mount(static_handler, '/media')
    mp3 = mp3_path.rsplit("\\",1)[1]
    return "media/" + urllib.quote(mp3)

感谢cyraxjoe上面的混乱被重新考虑为

    @cherrypy.expose
    def serve_mp3(self, mp3_path):
      mp3_path = urllib.unquote(mp3_path)
      return(cherrypy.lib.static.serve_file(mp3_path, content_type="audio/mpeg", disposition=None, name=None))

适用于提供音频标签。我知道它存在,这基本上是我的硬盘的前门访问,但这只是第一步,最终结果将由数据库驱动

1 个答案:

答案 0 :(得分:1)

我认为你应该使用functions to serve static files directly而不是处理程序,你正在使用该工具。通过直接调用函数,您可以根据需要提供任意路径或文件对象。