2010-11-26 13 views
1

Ich benutze cherrypy als Server. Dieser Server bietet Ihnen die Möglichkeit, MP3-Dateien herunterzuladen. Ich verwende den folgenden Code, um die MP3-Dateien herunterladbar zu machen. Das Problem ist, dass die mp3-Datei, die ich nach dem Download bekomme, eine Datendatei ist, die eigentlich eine mp3-Datei sein sollte.Serving mp3-Dateien von 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) 

Antwort

3

Versuchen Sie, das Verzeichnis mit den MP3-Dateien als statisches Verzeichnis einzurichten. Ihre cherrypy conf sollte wie folgt enthalten:

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

Dies ermöglicht es Ihnen, loszuwerden, die Download-Klasse zu erhalten und einfach Links erstellen, um die MP3-Dateien im HTML-Code, wie folgt aussehen:

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

Thank Sie für die Antwort James. Ich habe das Problem auf die gleiche Weise gelöst, aber vergessen, diesen Thread über das gleiche zu aktualisieren. Trotzdem, schätzen Sie Ihre Antwort. – chochim

+0

Kein Problem. Wenn Sie das Gefühl haben, dass dies die richtige Antwort ist, möchten Sie es vielleicht als solche markieren, damit jeder, der in Zukunft über diese Frage stolpert, Bescheid weiß. – jamesaharvey