Установить проблемы с XSendFile в Ubuntu
Я установил заголовки Apache Dev:
sudo apt-get install apache2-prefork-dev
Скачал и скомпилировал модуль, как описано здесь: http://tn123.ath.cx/mod_xsendfile/
Добавил следующую строку в /etc/apache2/mods-available/xsendfile.load:
LoadModule xsendfile_module /usr/lib/apache2/modules/mod_xsendfile.so
Добавил это в мой VirtualHost:
<VirtualHost *:80>
XSendFile on
XSendFilePath /path/to/protected/files/
Включил модуль, выполнив:
sudo a2enmod xsendfile
Затем я перезапустил Apache. Тогда этот код все еще просто предоставляет мне пустой файл с 0 байтами:
file_path = '/path/to/protected/files/some_file.zip'
file_name = 'some_file.zip'
response = HttpResponse('', mimetype='application/zip')
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name)
response['X-Sendfile'] = smart_str(file_path)
return response
И нет в журнале ошибок Apache, который относится к XSendFile. Что я делаю неправильно?
1 ответ
Я получил свой код на работу. Единственная разница заключается в следующем:
def serve_file(request, file):
response = HttpResponse(mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename="%s"' % smart_str(os.path.basename(_(file.file.name)))
response['X-Sendfile'] = smart_str(_(file.file.path))
# It's usually a good idea to set the 'Content-Length' header too.
# You can also set any other required headers: Cache-Control, etc.
return response