本篇文章为大家展示了利用Nginx怎么实现一个文件下载功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>一、配置强>
http { ,…… ,服务器:{ ,#配置下载 的位置才能/download { ,,root D: \ \下载; ,,autoindex ; ,,autoindex_exact_size ; ,,} ,} ,…… }
这是目录里随便放的几个文件,可以看到实现成功。
这里踩过几个坑,下面提示下:
<强> 1,根路径配置问题强>
刚开始配置的别名D: \下载,报错:2020/08/14 10:36:06(紧急情况)26396 # 16140:无效的参数数量“alias"指令在D: \程序文件\ nginx \ nginx-1.13.12/conf/nginx。相依:74
那么查配置74行,发现少了分号,加上问题依旧。换成根D: \下载;报错:2020/08/14 10:44:20(紧急情况)21376 # 17156:无效的参数数量“root"指令在D: \程序文件\ nginx \ nginx-1.13.12/conf/nginx。配置:74
问题依旧,后来发现路径有问题,写错了,应该是
root D:/下载;//,或者 root D: \ \下载;
原因都懂,就是\只是个转义字符,要么用\ \,要么就用/
<强> 2根与别名差别强>
好的,这样配置可以了。但是当我输入:http://localhost/download/,报404年错我的D盘目录下为D:/下载/*,然后其他文件
刚开始报错:2020/08/14 11:02:49(错误)9928 # 12876:11 *它仅仅()“D: \ \/download"下载;失败(2:系统找不到指定的文件),客户:127.0.0.1,服务器:要求:“HTTP/1.1/下载“,主持人:“localhost"
看到这个路径D: \ \/下载下载这里有问题,所以我把配置rootD:/下载/,,后面的/去掉了,再试,还是报错:2020/08/14 11:04:15(错误)3128 # 11636:* 1它仅仅()“D: \下载/download"失败(2:系统找不到指定的文件),客户:127.0.0.1,服务器:要求:“HTTP/1.1/下载“,主持人:“localhost"
所以考虑到不是路径的问题,那么问题原因在哪?在于根与别名配置的区别。
也就是说当rootD:/下载;时,你请求http://localhost/download/,他找的是:D: \ \下载下载
而当别名D:/下载;时,你请求http://localhost/download/,他找的才是:D: \下载
那么我把我的本地路径改一下:D:/下载/下载/*,然后再是其他文件,那么就成功了。
<强> 3中文文件问题强>
还有坑,点击全英文名文件是正常预览下载的,中文名文件报的错。在服务器段中添加utf - 8字符集;也不的行,或者<代码>字符集gbk, utf - 8;> 代码也不行。有清楚的,烦请不吝赐教,谢谢。
思考良久,应该不是nginx配置的问题了,因为很多地方都说这样配置就可以显示中文了。然后我想到会不会是系统编码问题呢?我用本地做服务器。使用chcp命令查了一下系统编码,显示936。一般正常能显示中文的是936年,那说明没问题。
虽然中文显示是正常的,但是* *的,一点还是报的错,乱码或者404人。没办法直接点击下载中文名文件,或者浏览中文名目录。
中文名文件下载可以通过复制文件名,然后贴在浏览器url后面,就可以下载下来了,中文名目录是真的无法浏览! ! !
原因是,windows服务器中文是gbk编码,nginx的这种页面的href就是用gbk进行urlencode的,然后一般浏览器都是使用utf - 8的,当然就没法访问了。
<强> 4,想防止浏览器自动打开文件而不是下载文件,添加强>
add_header Content-Disposition “附件;“
//,所有文件都不打开 位置/,{ ,add_header Content-Disposition “附件文件名*=utf - 8 # 39; zh_cn # 39; arg_n"美元;; }
一般存储在服务器上的文件都不会用原来的名字,所以下载的时候需要改的名,可通过url中添加参数,然后在nginx中根据参数来改名。
举例:参数为n=xxx.jpg
url: https"//xxxxx ? n=xxx.jpg//表示把下载下来的文件名字改为xxx.jpg
nginx需要配置成
的位置/,{ if (request_uri 美元;~ * ^。* \ ? n=([^和]+)美元),{ add_header Content-Disposition “文件名*=$ arg_n"; } }
注释:里面的utf - 8是有些浏览器会自动把文件改成urlencode的格式