Nginx设置实现下载文件的示例代码
无意听人说用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 Filenginxnginx-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 Filenginxnginx-1.13.12/conf/nginx.conf:74 题目仍旧,其后发明路径有题目,写错了,应该是 root D:/download; // 可能 root D:download; 缘故起因都懂,就是 只是个转义字符,要么用 ,要么就用 / 2、root与alias不同 ok,这样设置可以了。可是当我输入:,报错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; 时,你哀求,他找的是:D:downloaddownload 而当 alias D:/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?n=xxx.jpg //暗示把下载下来的文件名字改为xxx.jpg nginx必要设置成 location / { if ($request_uri ~* ^.*?n=([^&]+)$) { add_header Content-Disposition "filename*=$arg_n"; } } 注释:内里的utf-8是有些赏识器会自动把文件改成urlencode的名目 一样平常1,2都是要一路设置的 location / { if ($request_uri ~* ^.*?n=([^&]+)$) { add_header Content-Disposition "attachment;filename*=$arg_n"; } } 到此这篇关于Nginx设置实现下载文件的示例代码的文章就先容到这了,更多相干Nginx 下载文件内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |