Add to urls.py:
urlpatterns += patterns('',
url(r'^media\/(?P<path>.*)$', 'views.media_xsendfile', {
'document_root': settings.MEDIA_ROOT,
}),
)
Add to views.py:
from django.conf import settings
from django.http import HttpResponse
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def media_xsendfile(request, path, document_root):
response = HttpResponse()
response['Content-Type'] = ''
response['X-Sendfile'] = (os.path.join(settings.MEDIA_ROOT, path)).encode('utf-8')
return response
Comments
Along with UTF-8 encoding, you should use URL encoding.
https://github.com/nmaier/mod_xsendfile/commit/0efcd03ac196930da6b139b77972c0d430e0225c
This way any non-ASCII chars can be safely sent via the HTTP header (which must be 7 bit values).
response['X-Sendfile'] = urllib.quote(os.path.join(settings.MEDIA_ROOT, path).encode('utf-8'))#
Same for nginx but: X-Accel-Redirect instead of X-Sendfile
#
Additional info for nginx is here http://wiki.nginx.org/XSendfile
#