2016-09-15 4 views
3

J'utilise http.FileServer pour servir un répertoire de fichiers mp3, que mon modèle puis src en javascript. La réponse, cependant, utilise le Content-Typetext/html au lieu de audio/mpeg. Comment puis-je définir le type mime auquel répond le FileServer, j'ai vu cette question Setting the 'charset' property on the Content-Type header in the golang HTTP FileServer, mais je ne sais toujours pas comment remplacer le type mime.http.FileServer réponse avec un mime faux "Content-Type"

Mon code ressemble à ceci:

fs := http.FileServer(http.Dir(dir)) 
http.Handle("/media", http.StripPrefix("/media", fs)) 
http.HandleFunc("/", p.playlistHandler) 
http.ListenAndServe(":5177", nil) 

et l'erreur que je reçois est:

HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://localhost:5177/media/sample1.mp3 failed. 

Répondre

2

Ce n'est pas un problème de types de contenu. Votre gestionnaire fs n'est pas appelé lorsque vous demandez le mp3. Vous devez ajouter un / à votre modèle /media et le préfixe de la bande comme celui-ci

http.Handle("/media/", http.StripPrefix("/media/", fs)) 

La raison en est dans la documentation de net/http.ServeMux

modèles nom fixe, chemins enracinés, comme « /favicon.ico ", ou des sous-arbres enracinés, comme"/images/"(notez la barre oblique). Les motifs plus longs ont la priorité sur les plus courts, de sorte que si des gestionnaires sont enregistrés pour "/ images /" et "/ images/thumbnails /", ce dernier sera appelé pour les chemins commençant par "/ images/thumbnails /" et le premier recevra les demandes pour tous les autres chemins dans le sous-arbre "/ images /".

Avec juste /media vous l'enregistrement d'un gestionnaire pour un chemin, mais avec un slash, il estime qu'il est un rooted subtree et servir les requêtes sous cet arbre.