快捷搜索:   nginx

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结尾的参数就可以实现预览功能了.

顶(8)
踩(3)

您可能还会对下面的文章感兴趣:

最新评论