J'utilise mod_xsendfile (v0.12) pour servir des fichiers statiques où Django contrôle l'accès aux fichiers en fonction des utilisateurs et des permissions.XSendFile ne servira pas les fichiers dans Apache 2.2
Dans mon fichier de configuration, j'ai:
XSendFile On
XSendFilePath e:/documents/
<Directory e:/Documents>
Order allow,deny
Allow from all
</Directory>
Dans mon code django, je mis les en-têtes comme ceci:
assert(isinstance(filename, FieldFile))
xsendfile = filename.name
if(platform.system() == 'Windows'):
xsendfile = xsendfile.replace('\\', '/')
response = HttpResponse()
response['X-Sendfile'] = xsendfile
mimetype = mimetypes.guess_type(xsendfile)[0]
response['Content-Type'] = mimetype
response['Content-Length'] = filename.size
Et dans mon fichier journal je reçois:
[Fri Oct 22 08:54:22 2010] [error] [client 192.168.20.34] (20023)The given path
was above the root path: xsendfile: unable to find file:
e:/Documents/3/2010-10-20/TestDocument.pdf
Dans cette version de mod_xsendfile
,
XSendFileAllowAbove On
génère l'erreur:
Invalid command 'XSendFileAllowAbove', perhaps misspelled or defined by a module
not included in the server configuration
Je suppose que c'était parce qu'ils ont ajouté la liste blanche XSendFilePath
. Quelqu'un d'autre a-t-il eu ce travail?
Une autre chose que j'ai découverte dans tout cela est que le chemin entier est sensible à la casse, même si vous êtes sur Windows.Si j'avais été sur linux, cela m'aurait frappé immédiatement, mais sur Windows j'ai jeté ces problèmes. LA LETTRE DRIVE DOIT ÊTRE EN MAJUSCULES! – boatcoder