Nginx配置txt、pdf、doc、xls等文件直接下载或在线预览的方法
nginx也可用来作为附件服务器使用,毕竟nginx对静态文件支持较好,那么直接贴网址直接访问想下载,但是问题就来了,各大浏览器都针对,图片 txt,pdf,都是直接打开的,没法弹出另存为按钮。
解决思路就是,告诉浏览器这个文件需要下载而不是直接打开
1、下载方式
使用Nginx时,如果要让一些附件比如 txt,pdf,doc等不直接在浏览器打开,而是 弹出另存为的对话框(也就是下载)
则可以在nginx的加上头配置如下:
if ($request_filename ~* ^.*?\.(txt|pdf|doc|xls)$){ add_header Content-Disposition: 'attachment;'; }关键,$request_filename 是nginx变量文件名称,正则表达式,是匹配已.所需文件类型,这样就在响应中告诉浏览器可以下载了
如果客户端请求的文件以txt、pdf、doc、xls为后缀的话则会让浏览器出现另存为对话框。
2,预览方式
因为项目需要下载和预览,下载时能下载了但是预览也都变成下载了,这个有点悲催,似乎两个不能同时存在.
预览的思路还是和下载一样告诉浏览器我要预览这文件不许下载.
这里用到$request_uri,这个变量是访问的url地址,获取到url地址那么我们就可以在url上添加参数来辨别我是预览文件
代码:
server {
#监听的端口
listen 80;
server_name localhost;
location / {
root html;
set $flag 0;
if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)$){
set $flag 1;
}
#如果带有view说明是预览
if ($request_uri ~* view$){
set $flag 2;
}
if ($flag = 1){
add_header Content-Disposition: attachment;
}
index index.html index.htm;
}
这里$flag nginx自定义的一个变量,为什么要两个if来判断,这里也就不解释了
这样在预览的url上添加一个以view结尾的参数就可以实现预览功能了.
- 最新评论