关于.NETCORE站点程序部署到nginx上无法访问静态文件和无法正确生成文件的问题解决过程。

我的netcore6项目,部署到IIS的时候,生成报告时,需要获取公司LOGO图片放到PDF报告文件中,这时候访问静态图片没有问题。 然后还有生成邀请二维码图片,这时候动态创建图片路径和图片也没有问题,可以在站点的wwwroot目录下正确创建二维码图片。

但是部署到linux的nginx站点之后,不管是访问静态LOGO图片,还是动态生成二维码图片,都有问题了。

获取logo图片提示如下异常:

ERR\] Could not find file '/www/wwwroot/站点根目录名/wwwroot/ReportTemplate\\CompanyLogo\\jq_logo02.jpg'. 动态生成的二维码图片成了如下截图的样子: ![](https://img-blog.csdnimg.cn/direct/a5f6f2f0985344fca2be2cba354beb6b.png) 问题解决过程: 1、关于无法生成二维码的问题,网上搜到的资料有个说法是linux系统中,路径中不能有 \\\\ 这样的反斜杠,应该用 / 这样的正斜杠来分隔目录上下级,而且windows是可以支持 正斜杠/这样的文件物理路径的。我照此办法修改生成的文件目录物理地址串之后,是可以成功创建二维码图片了的。效果如下: ![](https://img-blog.csdnimg.cn/direct/3edad32a587748f9b9421996d78bf887.png) ![](https://img-blog.csdnimg.cn/direct/0f08cb4252f842d89603bf62a3c341ae.png) 2、关于导出时找不到LOGO图标的问题 ,错误提示里说的地址是下面这样的, '/www/wwwroot/站点根目录名/wwwroot/ReportTemplate\\CompanyLogo\\jq_logo02.jpg' 明显的这里面也有反斜杠,所以先想办法把导出报表里面的物理文件路径 的反斜杠 \\或者\\\\都替换成正斜杠/。 发布到nginx测试看是否可行。 ![](https://img-blog.csdnimg.cn/direct/960309fc021d4ee0972fa22f43d17441.png) 结果还是提示找不到logo图片, 最后我到宝塔里直接用这个报错的路径去访问文件,也提示找不到,最后发现是目录最后一级的 CompanyLog 这个名字的l大写了, 但实际目录却没有大写,linux是区分大小写的,所以找不到文件了。 ![](https://img-blog.csdnimg.cn/direct/b40c31eef1294c4f8eb6bfc5feb11dde.png) 解决了这个问题之后,发现还有错误日志 Export_series发生异常==The type initializer for ' ' threw an exception. 如下图所示 ![](https://i-blog.csdnimg.cn/direct/0f2261167f214c4f9ade238eb97a4172.png) 这个错误日志是我的导出报表业务类抛出来的,但是明显的描述不够详细,没法诊断具体错误发生的行。 只能继续加日志 一段段代码来打印日志。得到了如下日志结果 ![](https://i-blog.csdnimg.cn/direct/d460364a3c914098adf8260abe4e68be.png) ![](https://i-blog.csdnimg.cn/direct/5d59a3dc70404b63b6eb4ffdb4cf669d.png) 引起这个异常日志The type initializer for 'Gdip' threw an exception. 的原因是 设置图片大小的时候用了Image对象 属于GDI的,但是linux默认可能没有GDI包。根据百度查出来的资料提示。参考这个链接给linux安装了GDI包 ,我的是centos,所以使用yum install libgdiplus -y 命令安装。[The type initializer for 'Gdip' threw an exception_the type initializer for 'gdip' threw an exception-CSDN博客](https://blog.csdn.net/u010476739/article/details/124317037 "The type initializer for ‘Gdip‘ threw an exception_the type initializer for 'gdip' threw an exception-CSDN博客") ![](https://i-blog.csdnimg.cn/direct/93acee977e6f4f468c178a361aef4370.png) ![](https://i-blog.csdnimg.cn/direct/0b8ed4431ca74c2aac5a3f9bbfd26ff4.png) 安装了GDI包之后,重试接口导出,还是报GdIp异常,那就重启linux ![](https://i-blog.csdnimg.cn/direct/ddc056374d644c32b79148ec0c0496c0.png) 重启之后,没有GIDP的异常了 又得到了如下异常。对应的代码又有一个生成文件路径的方法GetFilePath,里面又发现了反斜杠\\ 所以在下面替换成正斜杠。 ![](https://i-blog.csdnimg.cn/direct/6635b69e788c4345a54c20be2fa73290.png) ![](https://i-blog.csdnimg.cn/direct/c1664a0a51db47e3b0b5da15842edb22.png) ![](https://i-blog.csdnimg.cn/direct/bbb8cc0cd27b4d1f895a24a7154143c0.png) 至此,终于能导出PDF文件了, 结果他给我来个中文乱码,中文全部成了小方格。 ![](https://i-blog.csdnimg.cn/direct/9fc8b5382e89491b980b233a3639642e.png) 我用的是aspose.words 插件来导出生成pdf文件,根据网上的说法是要把windows的字体上传到linux。下面展示windows字体上传至linux的操作步骤: 1、打包windows字体 windows字体在C:\\WINDOWS\\Fonts中。 直接将fonts文件夹压缩成压缩包。注意,到fonts文件夹里面全选再压缩貌似不能成功,我试过两次了,所以返回到上一级windows目录中对fonts文件夹压缩。 ![](https://i-blog.csdnimg.cn/direct/fbce6081254d4b7bad895312946739c7.png) 2、到linux创建目录并上传字体文件 执行命令创建win目录:mkdir /usr/share/fonts/win 上传文件到目录中,可以用ftp方式上传, 我用的是宝塔控制面板,网页界面直接上传的rar文件。 3、解压缩fonts.rar包 用cd .. 命令回到根目录,然后cd 几次进入 win文件夹. 用命令解压Fonts.rar文件: rar x Fonts.rar 如下图: ![](https://i-blog.csdnimg.cn/direct/1ab9ee2d3e7b41ac954904b8a6ce8313.png) 4、建立字体缓存 输入命令给字体文件夹更高权限:chmod -R 755 ./Fonts cd Fonts 进入 fonts文件夹 输入命令建立字体缓存:sudo mkfontscale # 如果提示 mkfontscale: command not found,需安装 yum install mkfontscale 安装好了之后继续执行 sudo mkfontscale sudo mkfontdir // 我没创建这个 sudo fc-cache -fv //使缓存生效 #如果提示 fc-cache: command not found,需安装 yum install fontconfig ![](https://i-blog.csdnimg.cn/direct/34925542b9ce4581ae297520a45f0b84.png) ![](https://i-blog.csdnimg.cn/direct/e80fe18a931e4c6291a6facc96440c5b.png) 5、是字体生效,重启项目 source /etc/profile fc-list #查看Linux下所有字体 fc-list :lang=zh #查看Linux下中文字体 然后重启项目就可以了 如果重启 项目还是不能正常导出中文,那就重启服务器。 正常导出如下图: ![](https://i-blog.csdnimg.cn/direct/ad8c55aa1f9148fe852c89979d7847ae.png)

相关推荐
小疆智控26 分钟前
数字化工厂升级引擎:Modbus TCP转Profinet网关助力打造柔性生产系统
服务器·网络·tcp/ip
XMYX-034 分钟前
Linux du 命令终极指南:从基础到精通
linux·服务器
purrrew1 小时前
【Java ee初阶】IP协议
服务器·网络协议·tcp/ip
一叶屋檐1 小时前
Neo4j 图书馆借阅系统知识图谱设计
服务器·数据库·cypher
愚润求学1 小时前
【Linux】动静态库链接原理
linux·运维·服务器·开发语言·笔记
勤不了一点3 小时前
小白上手RPM包制作
linux·运维·服务器·软件工程
盛夏绽放3 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
zizle_lin4 小时前
优雅使用Gunicorn进程管理FastAPI
服务器·fastapi·gunicorn
2501_906314325 小时前
MCP-RAG 服务器:完整设置和使用指南
运维·服务器
IP管家5 小时前
物联网设备远程管理:基于代理IP的安全固件更新通道方案
服务器·网络·物联网·网络协议·tcp/ip·安全·ip