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类型,提示用户把文件保存到本地。

本文介绍如何通过Nginx配置使浏览器强制下载特定类型的文件,如txt、pdf等,而不是在浏览器中直接打开。通过添加Content-Disposition头信息实现,包括正则表达式的使用和浏览器兼容性测试。
2062

被折叠的 条评论
为什么被折叠?



