Forum

Need some help? Ask our community for its assistance!

You are not logged in.

#1 26-07-2019 11:12:26

borsltd
Membre
Registered: 08-05-2014
Posts: 15

[Résolu] X-Accel-Redirect

Bonjour,

Juste pour confirmation, il semble que je ne puisse pas utiliser l'en-tête X-Accel-Redirect pour servir un fichier statique (le fichier original d'un champ FileField de modèle Django dans mon cas). C'est bien le cas ?

Je devrais pouvoir obtenir un résultat similaire avec la directive « Chemins statiques » de la configuration de mon site dans l'administration Alwaysdata.

Et comme ça, quelqu'un qui cherche ce terme trouvera ce thread.

Last edited by borsltd (26-07-2019 12:53:47)

Offline

#2 26-07-2019 11:21:47

@Cyril
Staff
From: Paris
Registered: 06-02-2007
Posts: 5,660
Website

Re: [Résolu] X-Accel-Redirect

Bonjour,

X-Accel-Redirect est une spécificité nginx, chez alwaysdata il faut utiliser X-Sendfile (même principe, juste le nom de l'en-tête qui change).

Offline

#3 26-07-2019 11:25:08

borsltd
Membre
Registered: 08-05-2014
Posts: 15

Re: [Résolu] X-Accel-Redirect

Oui je viens de découvrir ça (je migre d'un serveur maison avec Nginx).

Merci pour votre réponse plus rapide qu'une recherche web !

Je n'ai toujours pas mon fichier mais cette fois je vais faire mes devoirs avant de poser la question. :-)

Offline

#4 26-07-2019 12:53:04

borsltd
Membre
Registered: 08-05-2014
Posts: 15

Re: [Résolu] X-Accel-Redirect

J'ai trouvé !

Déjà, pas besoin d'un .htaccess avec une quelconque directive, ni de toucher aux chemins statiques dans l'admin du site.

La première différence avec le X-Accel-Redirect de Nginx, c'est qu'il faut déclarer le chemin du fichier, pas une URL :

field = instance.private_file  # Le FileField (ou ImageField ou autre sous-classe)
response["X-Sendfile"] = field.storage.path(field.name).encode('utf-8')

Mais j'avais une erreur de contenu corrompu.

Ce que j'ai trouvé et qui ne semble documenté nulle part, c'est qu'il faut aussi déclarer la taille du fichier :

response["Content-Length"] = field.storage.size(field.name)

Le storage est ici le FileSystemStorage par défaut de Django.

Encore mieux, il y a le paquet django-sendfile2 (le premier n'est plus maintenu) qui s'occupe de tous ces détails avec des backends pour Apache, Nginx... ou servi par Django en mode développement : https://pypi.org/project/django-sendfile2/

Last edited by borsltd (26-07-2019 22:35:05)

Offline

Board footer

Powered by FluxBB