我正在尝试使用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))
这对于提供音频标签来说效果很好。我知道它存在,这基本上是对我的硬盘的前门访问,但这只是第一步,最终结果将由数据库驱动