Как обслуживать не ascii имя файла с помощью django и apache, используя xsendfile
Я хотел обслуживать защищенное содержимое в django, поэтому я попытался установить xsendfile и в django, и в apache. Это работает для имен файлов ascii, но когда я попытался использовать имя файла не ascii, сервер apache ответил 404. Кто-нибудь знает, что здесь происходит?
Django:
def media_xsendfile_pdf(request):
file = Media.objects.last()
response = HttpResponse()
response['Content-Type'] = 'application/pdf'
response['X-Sendfile']= smart_str(f"{settings.BASE_DIR}{file.file.url}")
return response
Apache:
AllowEncodedSlashes On
XSendFile On
XsendFilePath /path-to-the-protected-resource
Блочная цитата
Я смог найти решение для этого,
В заголовке ответа нужно установить X-sendfile, как показано ниже
from urllib.parse import unquote
response["X-sendfile"] = unquote(<url>).encode('utf-8')
Надеюсь, вышесказанное окажется полезным для тех, кто застрял с этим.