Nginx文件强制下载的配置方法

有时您可能需要强制用户从您的网站下载内容,而不是在他们的网站上查看。如果您的网站有很多可下载的内容,这一点很重要。在本文中,我们将了解如何在 nginx 中强制下载文件。强制文件下载可防止用户在您的服务器上流式传输这些文件并减少您网站的服务器负载。
现在的浏览器能够识别很多文件类型(txt,pdf,jpg...),并在浏览器中自动打开
情况一:
添加头信息content-disposition attachment;会使浏览器强制下载:
代码如下:
#表示浏览器内嵌显示一个文件content-disposition: inline; filename=foobar.pdf #表示会下载文件,如火狐浏览器中content-disposition: attachment; filename=foobar.pdf  
nginx配置如下,在相应的server中添加如下location:
代码如下:
location /download { add_header content-disposition attachment;;}  
情况二:
有这么一个需求,对于图片文件和pdf等文件链接,只要访问实在某个路径下,不能在浏览器中打开图片,而是提示用户保存到本地,文件名使用访问的文件名。
这个问题主要是ie造成的,不管mime类型是什么,比如人工把图片的mime类型设置为octet-stream,如果浏览器认识文件后缀的话,仍然会在浏览器中打开图片。
解决方案:
在响应的http头添加:content-disposition: attachment; filename=文件名
nginx配置如下:
代码如下:
location ~ ^/somepath/(.*)$ { add_header content-disposition attachment; filename=$1; alias e:/apache-tomcat-7.0.32/webapps/upload/$1;   }  
这里使用到了正则表达式,捕获请求的文件名。
另外,需要注意nginx的location优先级,首先是=,然后是^~,最后才是~。
基本上,您需要在要强制下载的 url 的位置块中添加以下行。
add_header content-disposition attachment; filename=$1;default_type application/octet-stream;  
上面两行将内容处置标头设置为“附件”,将内容类型设置为“应用程序/八位字节流”以启用下载。
例如,如果您想对以 /downloads 开头的所有 url 强制下载,则在该文件夹的位置块中添加上述行,如下所示。
location /downloads { ... add_header content-disposition attachment; filename=$1; default_type application/octet-stream; ...}  
如果您想强制下载以某些文件类型和扩展名(例如 .jpg、.png、.mp3 等)结尾的所有文件,请在用于这些文件类型的位置块中添加上述 2 行。
location ~* ^/.+.(?:gif|jpe?g|png|mp4|mp3)$ { ... add_header content-disposition attachment; filename=$1; default_type application/octet-stream; ...}  
以上修改完成后需要重启nginx,或重新加载
nginx -s reload  


IU5365具有NTC及电池过放电电压保护功能,3A异步降压型铅酸电池充电管理IC
如何制作镜头跟拍器
dfrobot人体热释电红外传感器介绍
Buck电路电感的最大值峰值是在什么电压下面的
浅谈高通与联发科在5G智能手机市场的竞争
Nginx文件强制下载的配置方法
一份非常详尽的PyTorch教程,从如何安装PyTorch开始
铜电镀应用广泛 光伏方案多元化
借助深度学习算法实现5秒内克隆你的声音
高精度低功耗稳压器PC57L0XX参数概述 600ma待机电流
2019年AI应用彻底爆发,这是程序员给时代的魔法
倾斜摄影技术构建 WebGIS 智慧展馆
机加工自动化生产线的优势和优点
小米6首发骁龙835处理器受三星节制,或换黑科技替代
在S7中FB520如何触发RFID控制
IPv6公共DNS DoT/DoH开启公测
基于数字信号处理器DSP2106X实现雷达信号处理系统的设计
智能家居行业未来前景无限,将逐步演化为家电行业的下一个百亿级市场
联通混改方案猜想:借力BAT 引入外部资本
iOS13.3正式版发布 修复大量bug