servir contenido estático arbitrario sobre la marcha con cherrypy

Estoy tratando de crear un servidor de medios usando cherrypy y no puedo hacer que cherrypy sirva archivos en ningún directorio que no esté configurado al inicio en la configuración. No quiero exponer el directorio raíz de las unidades. Preferiría exponer un directorio en el momento en que lo necesite. ¿Hay alguna forma de hacer esto?

aquí está el fragmento relevante de mi código actual.

@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)

Gracias a Cyraxjoe, el desorden anterior terminó siendo refactorizado como

    @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))

que funcionó bien para servir una etiqueta de audio. Sé que existe, esto es básicamente el acceso de la puerta principal a mi disco duro, pero este es solo un primer paso y el resultado final será impulsado por una base de datos.

preguntado el 29 de junio de 12 a las 20:06

1 Respuestas

Creo que deberías usar el funciones para servir archivos estáticos directamente en lugar del manipulador, estás luchando con la herramienta. Con la llamada directa de las funciones, puede servir cualquier ruta u objeto de archivo arbitrario si lo desea.

Respondido el 29 de junio de 12 a las 23:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.