nginx强制下载txt等文件
当前的浏览器能够识别文件格式,如果浏览器本身能够解析就会默认打开,如果不能解析就会下载该文件。比如txt文件就直接被解析,还有其他文件也是一样。
那么使用nginx做资源服务器的时候,如何强制下载文件呢?
当前的nginx文件路径配置如下:
添加头信息Content-Disposition "attachment;"会使浏览器强制下载:
if ($request_filename ~* ^.*?\.(txt|pdf|doc|xls)$){
add_header Content-Disposition "attachment;";
}
当然,也可以直接加头而不进行判断的:
add_header Content-Disposition "attachment;";
测试:txt文件可以直接下载,在IE浏览器测试也是没有问题的
不管mime类型是什么,比如人工把图片的mime类型设置为octet-stream,如果浏览器认识文件后缀的话,仍然会在浏览器中打开图片,IE浏览器够垃圾的吧?
解决方案:在响应的http头添加:Content-Disposition: attachment; filename=文件名
add_header Content-Disposition "attachment; filename=$1";
使用到了正则表达式,捕获请求的文件名。
需要注意nginx的location优先级,首先是=,然后是^~,最后才是~。
这样,IE浏览器就会忽略掉原mime类型,提示用户把文件保存到本地。