如果您的 django 应用程序由 nginx 代理,您可以使用x-accell-redirect。您需要在响应中传递一个特殊的标头,nginx 会拦截它并开始提供文件,您也可以在同一响应中传递 Content-Disposition 以强制下载。
如果您想控制哪些用户可以访问这些文件,那么该解决方案很好。
您还可以使用如下配置:
#files which need to be forced downloads
location /static/high_res/ {
root /project_root;
#don't ever send $request_filename in your response, it will expose your dir struct, use a quick regex hack to find just the filename
if ($request_filename ~* ^.*?/([^/]*?)$) {
set $filename $1;
}
#match images
if ($filename ~* ^.*?\.((jpg)|(png)|(gif))$) {
add_header Content-Disposition "attachment; filename=$filename";
}
}
location /static {
root /project_root;
}
这将强制下载某个 high_res 文件夹(MEDIAROOT/high_rest)中的所有图像。而对于其他静态文件,它将表现得像往常一样。请注意,这是一个修改后的快速破解,适用于我。它可能具有安全隐患,因此请谨慎使用。