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

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

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

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

ERR Could not find file '/www/wwwroot/站点根目录名/wwwroot/ReportTemplate\CompanyLogo\jq_logo02.jpg'.

动态生成的二维码图片成了如下截图的样子:

问题解决过程:

1、关于无法生成二维码的问题,网上搜到的资料有个说法是linux系统中,路径中不能有 \\ 这样的反斜杠,应该用 / 这样的正斜杠来分隔目录上下级,而且windows是可以支持 正斜杠/这样的文件物理路径的。我照此办法修改生成的文件目录物理地址串之后,是可以成功创建二维码图片了的。效果如下:

2、关于导出时找不到LOGO图标的问题 ,错误提示里说的地址是下面这样的,

'/www/wwwroot/站点根目录名/wwwroot/ReportTemplate\CompanyLogo\jq_logo02.jpg'

明显的这里面也有反斜杠,所以先想办法把导出报表里面的物理文件路径 的反斜杠 \或者\\都替换成正斜杠/。 发布到nginx测试看是否可行。

结果还是提示找不到logo图片, 最后我到宝塔里直接用这个报错的路径去访问文件,也提示找不到,最后发现是目录最后一级的 CompanyLog 这个名字的l大写了, 但实际目录却没有大写,linux是区分大小写的,所以找不到文件了。

解决了这个问题之后,发现还有错误日志

Export_series发生异常==The type initializer for ' ' threw an exception.

如下图所示

这个错误日志是我的导出报表业务类抛出来的,但是明显的描述不够详细,没法诊断具体错误发生的行。 只能继续加日志 一段段代码来打印日志。得到了如下日志结果

引起这个异常日志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博客

安装了GDI包之后,重试接口导出,还是报GdIp异常,那就重启linux

重启之后,没有GIDP的异常了

又得到了如下异常。对应的代码又有一个生成文件路径的方法GetFilePath,里面又发现了反斜杠\ 所以在下面替换成正斜杠。

至此,终于能导出PDF文件了, 结果他给我来个中文乱码,中文全部成了小方格。

我用的是aspose.words 插件来导出生成pdf文件,根据网上的说法是要把windows的字体上传到linux。下面展示windows字体上传至linux的操作步骤:

1、打包windows字体

windows字体在C:\WINDOWS\Fonts中。 直接将fonts文件夹压缩成压缩包。注意,到fonts文件夹里面全选再压缩貌似不能成功,我试过两次了,所以返回到上一级windows目录中对fonts文件夹压缩。

2、到linux创建目录并上传字体文件

执行命令创建win目录:mkdir /usr/share/fonts/win

上传文件到目录中,可以用ftp方式上传, 我用的是宝塔控制面板,网页界面直接上传的rar文件。

3、解压缩fonts.rar包

用cd .. 命令回到根目录,然后cd 几次进入 win文件夹.

用命令解压Fonts.rar文件: rar x Fonts.rar

如下图:

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

5、是字体生效,重启项目

source /etc/profile

fc-list #查看Linux下所有字体

fc-list :lang=zh #查看Linux下中文字体

然后重启项目就可以了

如果重启 项目还是不能正常导出中文,那就重启服务器。

正常导出如下图:

相关推荐
風穆1 分钟前
多云时代的“服务器比价网”:OopsVPS 实用主义指南
服务器
wgh6535 分钟前
旁挂组网双机热备负载分担
运维·服务器
2401_8949155314 分钟前
部署 GEO 优化源码常见报错排查:端口、伪静态、缓存问题解决
java·运维·服务器·后端·缓存·开源
Lysander.Jovian20 分钟前
Nginx服务2
运维·数据库·nginx
酷可达拉斯1 小时前
自动化运维-从零开始编写ansible剧本(二)
linux·运维·服务器·centos·自动化
风曦Kisaki2 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes
·薯条大王11 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
ZJH__GO14 小时前
网络编程v4pro--实现聊天室文件传输功能
java·服务器·网络·计算机网络
小小、码农14 小时前
Linux进程控制:从fork到exec,手写一个简易Shell
linux·运维·服务器
不会就选b14 小时前
Linux之进程间通信(二)---模拟进程池
linux·运维·服务器