微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django 和 NGINX:如何向内部查看器提供受保护的媒体文件?

如何解决Django 和 NGINX:如何向内部查看器提供受保护的媒体文件?

目前我保护我的媒体文件免受未经授权的访问,例如描述的here 具有以下配置:

媒体文件位于 /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_URLMEDIA_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 文件(来源来自 here)。文件的路径通过哈希参数传递,因此带有嵌入式查看器的视图的有效 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/;
}
...

但是无需再次登录即可查看和下载媒体文件

非常感谢有关如何向嵌入式查看器提供受保护媒体文件的任何提示

提问是一门我不掌握的艺术。因此,如果有什么需要澄清或信息缺失,请随时告诉我。

提前致谢并致以最诚挚的问候 克里斯

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。