偶尔听人说用nginx实现文件上传下载,之前看nginx实践大致看到过,没有细究。所以今天就想研究下nginx实现文件的上传下载,直接开搞,本地服务启起。这里记录下配置及踩坑记录。
一、配置
http { ... server: { # 配置下载 location /download { root D:\\download; autoindex on; autoindex_exact_size off; } } ... }
这是目录里随便放的几个文件,可以看到实现成功。
这里踩过几个坑,下面提示下:
1、root路径配置问题
刚开始配置的 alias D:\download,报错:2020/08/14 10:36:06 [emerg] 26396#16140: invalid number of arguments in "alias" directive in D:\Program File\nginx\nginx-1.13.12/conf/nginx.conf:74
那么查配置 74 行,发现少了分号,加上问题依旧。换成 root D:\download;,报错:2020/08/14 10:44:20 [emerg] 21376#17156: invalid number of arguments in "root" directive in D:\Program File\nginx\nginx-1.13.12/conf/nginx.conf:74
问题依旧,后来发现路径有问题,写错了,应该是
root D:/download; // 或者 root D:\\download;
原因都懂,就是 \ 只是个转义字符,要么用 \\,要么就用 /
2、root与alias差别
ok,这样配置可以了。但是当我输入:http://localhost/download/,报错404,我的D盘目录下为D:/download/*,然后其他文件
刚开始报错:2020/08/14 11:02:49 [error] 9928#12876: *11 CreateFile() "D:\download\/download" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: , request: "GET /download HTTP/1.1", host: "localhost"
看到这个路径D:\download\/download这里有问题,所以我把配置rootD:/download/;,后面的 / 去掉了,再试,还是报错:2020/08/14 11:04:15 [error] 3128#11636: *1 CreateFile() "D:\download/download" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: , request: "GET /download HTTP/1.1", host: "localhost"
所以考虑到不是路径的问题,那么问题原因在哪?在于 root 与 alias 配置的区别。
也就是说 当 rootD:/download; 时,你请求http://localhost/download/,他找的是:D:\download\download
而当 alias D:/download; 时,你请求http://localhost/download/,他找的才是:D:\download
那么我把我的本地路径改一下:D:/download/download/*,然后再是其他文件,那么就成功了。
3、中文文件问题
还有坑,点击全英文名文件是正常预览下载的,中文名文件报错。在 server段中添加 charset utf-8; 也不行,或者 charset gbk,utf-8;
也不行。有清楚的,烦请不吝赐教,谢谢。
思考良久,应该不是nginx配置的问题了,因为很多地方都说这样配置就可以显示中文了。然后我想到会不会是系统编码问题呢?我用本地做服务器。使用chcp命令查了一下系统编码,显示936。一般正常能显示中文的是936,那说明没问题。
虽然中文显示是正常的,但是**的,一点还是报错,乱码或者404。没办法直接点击下载中文名文件,或者浏览中文名目录。
中文名文件下载可以通过 复制文件名,然后贴在浏览器url后面,就可以下载下来了,中文名目录是真的无法浏览!!!
原因是,windows服务器中文是gbk编码,nginx的这种页面的href就是用gbk进行urlencode的,然后一般浏览器都是使用utf-8的,当然就没法访问了。
4、想防止浏览器自动打开文件而不是下载文件,添加
add_header Content-Disposition "attachment;";
// 所有文件都不打开 location / { add_header Content-Disposition "attachment;filename*=utf-8'zh_cn'$arg_n"; }
一般存储在服务器上的文件都不会用原来的名字,所以下载的时候需要改名,可通过url中添加参数,然后在nginx中根据参数来改名。
举例:参数为 n=xxx.jpg
url:https"//xxxxx"htmlcode">
location / { if ($request_uri ~* ^.*\"filename*=$arg_n"; } }
注释:里面的utf-8是有些浏览器会自动把文件改成urlencode的格式
一般1,2都是要一起配置的
location / { if ($request_uri ~* ^.*\"attachment;filename*=$arg_n"; } }
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 关淑怡.2009-ERA【星娱乐】【WAV+CUE】
- 林忆莲《关于她的爱情故事》2022新世纪MQA 24K金碟限量版[WAV+CUE]
- 张雨生1993《一天到晚游泳的鱼》台湾G字首版[WAV+CUE][1G]
- 群星《试音五大女声》[WAV+CUE][1G]
- 魔兽世界wlk武器战一键输出宏是什么 wlk武器战一键输出宏介绍
- 魔兽世界wlk狂暴战一键输出宏是什么 wlk狂暴战一键输出宏介绍
- 魔兽世界wlk恶魔术士一键输出宏是什么 wlk恶魔术士一键输出宏介绍
- 医学爱好者狂喜:UP主把医学史做成了格斗游戏!
- PS5 Pro评分解禁!准备升级入手吗?
- 我们盘点了近期火热的国产单机游戏!《琉隐神渡》等 你期待哪款?
- 2019年第12届广州影音展双碟纪念版ADMS2CD[MP3/WAV]
- 黄安《救姻缘》台首版[WAV+CUE]
- 模拟之声慢刻CD《柏林之声4》[正版CD低速原抓WAV+CUE]
- 李宗盛 《李宗盛经典金曲》[WAV+CUE][1G]
- 周华健《粤语精选》[WAV+CUE][1G]