nginx(5)的try_file踩坑填坑日记
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx(5)的try_file踩坑填坑日记相关的知识,希望对你有一定的参考价值。
参考技术Atry_files是nginx中http_core核心模块所带的指令,主要是能替代一些rewrite的指令,提高解析效率。官网的文档为 http://nginx.org/en/docs/http/ngx_http_core_module.html#try_files
try_files的语法规则:
格式1:try_files file ... uri; 格式2:try_files file ... =code;
可应用的上下文:server,location段。
try_files语法解释:
http://localhost:8090/test?a=1 的uri是 /test 。
http://localhost:8090/test/asas?a=1 的uri是 /test/asas
http://localhost:8090/test/asas 的uri是 /test/asas
http://localhost:8090/38/index.txt 的uri是 /38/index.txt
try_files 是获取文件:
请求地址: http://localhost:8083/38/asas?a=1
因为location的规则是 location ~* ^/(273|38)/([^/]*)/ ,找不到对应的location。
解决方案:修改规则: location ~* ^/(273|38)/([^/]*)
重新定位不到的话,会返回404异常。
以上出现死循环,故nginx返回500。
DotNetZip生成多个excel文件损坏-踩坑填坑系列
最近有接到一个需求-使用EPPlus导出Excel插件压缩成压缩包批量导出,但是不针对一个一个的excel文件做生成保存操作,当时按照以前正常的经验不都是遍历读取文件流,然后再放入压缩包中导出吗,然后有点懵逼,不知从何先手,不管三七二十一,开始找线索,调试EPPlus导出的代码,发现了package.GetAsByteArray(),顿时在想,这不是生成出来的Byte吗,我是不是可以用Byte直接放入压缩包中间跟压缩包一起打包的时候把文件也生成,这样不就避免了excel文件的生成吗,开始找资料。。。
百度 找到一篇文章https://www.5axxw.com/questions/content/fw9mwt,
看到此处,欣喜若狂,果然是可以直接用流进行导出的,然后我上NuGet上下载了
开始开发,导出单个文件测试的时候没有问题,心里狂喜,以为问题就这么迎刃而解了,但是接下来踩坑了,也可能是自己挖的
批量导出后打开文件总是提示文件已损坏,然后懵逼了,各种找资料,看到了这个
看到是插件的问题,心里凉了半截,以为这个问题就基本无解了,看了替代方案,百度了很久,SharpZipLib的资料基本都是针对具体文件的,死活没找到是针对Byte直接操作导出多个excel压缩包的(可能是个人能力问题),心想没有其他的解决方案,这个又行不通,这怎么办,难道问题就解决不了了吗,但是秉承着程序员的优良传统,继续钻研,首先用排除法,排除两种因素,一种是插件的因素,一种是自己代码的因素,结果排查到后面打脸了,自己批量的时候代码有问题,现将代码贴出并说明,结合上面链接的例子
首先声明,然后在EPPlus得到byte的地方进行操做,
红框中就是坑点,导致文件损坏的主因,因为默认都是声明一个MemoryStream进行装载,这样会导致AddEntry和Save的内容没有区分开冲突,正确的做法是声明两个,多个MemoryStream对多个内容进行装载,一个MemoryStream对多个MemoryStream进行装载,通俗的解释就是一个model中还有一个list<model>,而不是在一个model中用无数个字段来表达多条数据,到此踩坑完毕,记录一下,供大家使用
如果您觉得这篇博客对您产生了一些必要的帮助, 欢迎您对我意思意思, 我将会觉得您非常够意思!
以上是关于nginx(5)的try_file踩坑填坑日记的主要内容,如果未能解决你的问题,请参考以下文章