华域联盟 .Net Nginx配置实现下载文件的示例代码

Nginx配置实现下载文件的示例代码

Nginx配置实现下载文件的示例代码
 更新时间:2020年11月11日 09:39:00   作者:古兰精  

这篇文章主要介绍了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 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,这样配置可以了。但是当我输入: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; 时,你请求localhost/download/,他找的是:D:\\download\\download
  而当 alias D:/download; 时,你请求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?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 下载文件内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:Nginx中accept锁的机制与实现详解解决Nginx 配置 proxy_pass 后 返回404问题Nginx配置SSL证书出错解决方案Nginx 502 Bad Gateway错误原因及解决方案nginx location中多个if里面proxy_pass的方法nginx 多个location转发任意请求或访问静态资源文件的实现查看nginx配置文件路径和资源文件路径的方法详解nginx进程锁的实现

Nginx
下载文件

相关文章
NET Core 3.0 AutoFac内置DI替换的新姿势分享这篇文章主要给大家介绍了关于NET Core 3.0 AutoFac内置DI替换的新姿势,文中通过示例代码介绍的非常详细,对大家学习或者使用NET Core 3.0具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 2019-09-09
asp.net生成字母和数字混合图形验证码这篇文章主要为大家详细介绍了asp.net生成字母和数字混合图形验证码的实现方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-02-02
ASP.NET 2.0写无限级下拉菜单ASP.NET 2.0提供了一个Menu 类,可以方便地创建水平或者垂直方向的下拉菜单,下面就是一个例子: 2008-12-12
C# 中使用iTextSharp组件创建PDF的简单方法C# 中使用iTextSharp组件创建PDF的简单方法,需要的朋友可以参考一下 2013-03-03
.NET读写Excel工具Spire.Xls使用 Excel单元格控制(3)这篇文章主要为大家详细介绍了.NET读写Excel工具Spire.Xls使用,Excel单元格控制,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-11-11
ASP.NET(C#)应用程序配置文件app.config/web.config的增、删、改应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config)。 2009-06-06
使用ASP.NET创建线程实例教程这篇文章主要介绍了使用ASP.NET创建线程的方法,需要的朋友可以参考下 2014-07-07
ASP.NET Core 过滤器中使用依赖注入知识点总结在本篇文章里小编给大家分享的是关于ASP.NET Core 过滤器中使用依赖注入的相关知识点内容,需要的朋友们学习下。 2019-10-10
拥有网页版小U盘 ASP.NET实现文件上传与下载功能这篇文章主要为大家详细介绍了ASP.NET实现文件上传与下载功能,类似于U盘功能,具有一定的参考价值。感兴趣的小伙伴们可以参考一下 2016-08-08
灵活掌握Asp.net MVC中GridView的使用方法这篇文章主要帮助大家灵活掌握Asp.net MVC中GridView的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-11-11

最新评论

本文由 华域联盟 原创撰写:华域联盟 » Nginx配置实现下载文件的示例代码

转载请保留出处和原文链接:https://www.cnhackhy.com/5030.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部