en-têtes HTTP personnalisés pour les fichiers statiques avec Django
Je suis en train d'écrire une banque d'images avec Django, et je veux ajouter un bouton pour obtenir une haute résolution version de l'image (bas-res est indiqué dans la page de détails). Si je mets juste un <a>
lien, le navigateur va s'ouvrir l'image au lieu de la télécharger. L'ajout d'un en-tête HTTP, comme:
Content-Disposition: attachment; filename="beach008.jpg"
fonctionne, mais comme c'est un fichier statique, je ne veux pas traiter la demande avec Django. Actuellement, je suis en utilisant NGINX pour servir les fichiers statiques, et les pages dynamiques sont redirigés via FastCGI pour le Django processus. Je suis en train de réfléchir à l'aide de NGINX add-header
de commande, mais peut-on définir la filename="xx"
partie?. Ou peut-être il ya une certaine façon de traiter la demande dans Django, mais de faire de NGINX servir le contenu?
OriginalL'auteur Javier | 2008-11-04
Vous devez vous connecter pour publier un commentaire.
Si votre django app est mandaté par nginx, vous pouvez utiliser x-accell de redirection. Vous devez passer un en-tête spécial dans votre réponse, nginx va intercepet ceci et commencer à servir le fichier, vous pouvez également passer Content-Disposition de la même réponse pour forcer un téléchargement.
Que la solution est bonne si vous souhaitez contrôler quels utilisateurs ont accès à ces fichiers.
Vous pouvez également utiliser une configuration comme ceci:
Cela va forcer le téléchargement de toutes les images dans certains high_res dossier (MEDIAROOT/high_rest). Et pour les autres fichiers statiques, il va se comporter comme d'habitude. Veuillez noter que ceci est une modification rapide hack qui fonctionne pour moi. Il peut avoir des implications en matière de sécurité, afin de l'utiliser avec précaution.
Ai-je raté quelque chose ou est -.*? redondant? Vous pouvez simplement utiliser .* si elle est l'expression rationnelle perl.
OriginalL'auteur Vasil
J'ai écrit un simple décorateur, pour django.les vues.statique.servir vue
Qui fonctionne parfaitement pour moi.
Aussi, vous pouvez jouer avec nginx mime-types
http://wiki.codemongers.com/NginxHttpCoreModule#types
Cette solution ne fonctionne pas pour moi, parce que je voulais avoir à la fois le lien direct pour le fichier (de sorte que l'utilisateur peut afficher des images, par exemple), et le lien de téléchargement.
OriginalL'auteur Andrew Kurinnyi
Ce que je suis en train de faire maintenant est d'utiliser une URL différente pour le téléchargement que pour les "vues", et d'ajouter le nom de fichier comme un argument d'URL:
médias habituels lien:
http://xx.com/media/images/lores/f_123123.jpg
lien de téléchargement:
http://xx.com/downs/hires/f_12323?beach008.jpg
et nginx a une config comme ceci:
mais je n'aime vraiment pas l'odeur de celui-ci.
OriginalL'auteur Javier