в настоящее время я защищаю свои медиафайлы от несанкционированного доступа, как описано, например. здесь со следующей конфигурацией:
Медиафайлы расположены в /home/mysite/dproject/media/
В конфигурации nginx расположение медиафайлов задается следующим образом:
...
location /protected/ {
internal;
alias ../mysite/dproject/media/;
}
...
В urls.py я перенаправляю запросы на /media/
в представление с отказом в доступе:
urlpatterns = [
...
re_path(r'^media/', login_required(PermissiondeniedView.as_view()), name='directmediaaccessdenied')
]
В settings.py
заданы пути MEDIA_URL
и MEDIA_ROOT
:
MEDIA_ROOT = str(PROJ_DIR('media'))
MEDIA_URL = '/media/'
Чтобы предоставить файлы для загрузки, я использую в своих представлениях следующий код:
response = HttpResponse()
path = os.path.normcase( '/protected/' + filepath )
del response['Content-Type']
response['Content-Disposition'] = 'attachment; filename="%s"' % path
response['X-Accel-Redirect'] = path
return response
Пока все работает так, как ожидалось, но я не могу предоставить данные встроенным средствам просмотра PDF или 3D.
Например, я использую средство просмотра для отображения 3D-файлов (источник взят из здесь). Путь к файлу передается с хеш-параметром, поэтому допустимый URL-адрес представления со встроенным просмотрщиком выглядит так:
https://mysite.mydomain.com/3Dview/#model=/protected/path/to/file.ext
С описанной выше конфигурацией вьюверу не удается загрузить файл. Средство просмотра работает, когда я меняю URL на
https://mysite.mydomain.com/3Dview/#model=/media/path/to/file.ext
и конфиг nginx для:
...
location /media/ {
alias ../mysite/dproject/media/;
}
...
но затем медиафайлы можно просматривать и загружать без входа в систему снова.
Любые подсказки о том, как предоставлять защищенные медиафайлы встроенным программам просмотра, приветствуются!
Задавать вопросы — это искусство, которым я не владею. Так что не стесняйтесь, дайте мне знать, если что-то нуждается в разъяснении или если информация отсутствует.
Заранее спасибо и с наилучшими пожеланиями Крис