2010-11-26 49 views
1

J'utilise cherrypy comme serveur. Ce serveur vous donne la possibilité de télécharger des fichiers .mp3. J'utilise le code suivant pour rendre les fichiers .mp3 téléchargeables. Le problème est que le fichier mp3 que je reçois après le téléchargement est un fichier de données qui devrait être un fichier mp3.servant des fichiers mp3 de cherrypy

import glob 
import os.path 
import cherrypy 
from cherrypy.lib.static import serve_file 

class Root: 
    def index(self, directory="."): 

     html = """<html><body><h2>Here are the files in the selected directory:</h2> 
     <a href="index?directory=%s">Up</a><br /> 
     """ % os.path.dirname(os.path.abspath(directory)) 
     for filename in glob.glob(directory + '/*'): 
      absPath = os.path.abspath(filename) 
      if os.path.isdir(absPath): 
       html += '<a href="/index?directory=' + absPath + '">' + os.path.basename(filename) + "</a> <br />" 
      else: 
       html += '<a href="/download/?filepath=' + absPath + '">' + os.path.basename(filename) + "</a> <br />" 

     html += """</body></html>""" 
     return html 
    index.exposed = True 

class Download: 

    def index(self, filepath): 
     return serve_file(filepath, "audio/mpeg", "attachment") 
    index.exposed = True 

if __name__ == '__main__': 
    root = Root() 
    root.download = Download() 
    cherrypy.quickstart(root) 

Répondre

3

Essayez de configurer le répertoire contenant les fichiers mp3 en tant que répertoire statique. Votre cherrypy conf doit contenir quelque chose comme ceci:

'/directory_with_mp3s': { 
     'tools.staticdir.on': True, 
     'tools.staticdir.dir': 'directory_with_mp3s' 
} 

Cela vous permettra de vous débarrasser de la classe de téléchargement et de créer simplement des liens vers les fichiers mp3 dans le code html qui ressemblent à ceci:

<a href="directory_with_mp3s/somemp3.mp3">some mp3</a> 
+0

Remerciez vous pour la réponse James. J'ai résolu le problème de la même manière, mais j'ai oublié de mettre à jour ce sujet à peu près le même. Encore, appréciez votre réponse. – chochim

+0

Pas de problème. Si vous pensez que c'est la bonne réponse, vous voudrez peut-être la marquer comme telle, de sorte que toute personne qui trébuche sur cette question à l'avenir le sait. – jamesaharvey