Maison >développement back-end >Tutoriel Python >Comment servir des fichiers téléchargeables avec des chemins cachés dans Django ?

Comment servir des fichiers téléchargeables avec des chemins cachés dans Django ?

DDD
DDDoriginal
2024-11-28 11:19:12180parcourir

How to Serve Downloadable Files with Hidden Paths in Django?

Téléchargement dynamique de fichiers avec Django

Dans les applications Web, il est souvent nécessaire de permettre aux utilisateurs de télécharger des fichiers. Cependant, vous souhaiterez peut-être masquer les chemins d’accès aux fichiers pour empêcher l’accès direct. Avec Django, vous pouvez servir des fichiers téléchargeables avec des chemins cachés.

La question :

Un utilisateur souhaite créer une URL comme http://example.com/download /?f=somefile.txt qui, une fois accessible, sert un fichier situé dans /home/user/files/somefile.txt sans l'afficher dans le navigateur.

La réponse :

Pour y parvenir, vous pouvez utiliser une combinaison de la classe HttpResponse et du module xsendfile. HttpResponse génère le chemin d'accès au fichier ou au fichier lui-même, tandis que xsendfile gère le traitement réel du fichier.

Voici un exemple d'extrait de code qui illustre l'intégration :

from django.utils.encoding import smart_str
from django.http import HttpResponse

response = HttpResponse(content_type='application/force-download')
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(path_to_file)
return response

Cette solution vous oblige à avoir le contrôle de votre serveur ou assurez-vous que mod_xsendfile (pour Apache) ou X-Accel-Redirect (pour nginx) est défini up.

Mise à jour pour Django 1.7 :

L'attribut mimetype dans le code doit être remplacé par content_type.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn