Sto usando mod_xsendfile (v0.12) per servire file statici in cui Django sta controllando l'accesso ai file in base agli utenti e alle autorizzazioni.XSendFile non servirà i file in Apache 2.2
Nel mio file di configurazione, ho:
XSendFile On
XSendFilePath e:/documents/
<Directory e:/Documents>
Order allow,deny
Allow from all
</Directory>
Nel mio codice Django, ho impostato le intestazioni in questo modo:
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
E nel mio file di log ottengo:
[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
In questa versione di mod_xsendfile
,
XSendFileAllowAbove On
genera l'errore:
Invalid command 'XSendFileAllowAbove', perhaps misspelled or defined by a module
not included in the server configuration
ho pensato che era perché hanno aggiunto alla lista bianca XSendFilePath
. Qualcun altro ha funzionato?
Un'altra cosa che ho scoperto in tutto questo è che l'intero percorso è case sensitive, anche se si è su Windows.Se fossi stato su Linux mi sarebbe venuto in mente immediatamente, ma su Windows ho scartato quei problemi. La LETTERA DI TRASMISSIONE DEVE ESSERE IN MAIUSCOLO! – boatcoder