当前位置: 首页 > news >正文

关于.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下中文字体
然后重启项目就可以了

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

正常导出如下图:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Linux】内核文件系统系统调用流程摸索
  • Windows安装和使用Doccano标注工具
  • linux 文件末尾追加内容
  • C语言之指针的奥秘(二)
  • flutter
  • 09.AOP-尚硅谷Spring零基础入门到进阶,一套搞定spring6全套视频教程(源码级讲解)
  • aws slb
  • 【数据结构】链表带环问题分析及顺序表链表对比分析
  • 【Linux】进程间通信之System V共享内存
  • 华宇携TAS应用中间件亮相2024年山东江信智能信创产品推介会
  • Unity之Text组件换行\n没有实现+动态中英互换
  • AIGC时代创意设计师从“创作”向“智作”升级
  • 深入解析 HTTP Headers 中的 baggage 参数
  • 【前端】包管理器:npm、Yarn 和 pnpm 的全面比较
  • pytorch实现水果2分类(蓝莓,苹果)
  • 2017-08-04 前端日报
  • Electron入门介绍
  • Facebook AccountKit 接入的坑点
  • iOS | NSProxy
  • Java超时控制的实现
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Java应用性能调优
  • Mybatis初体验
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 观察者模式实现非直接耦合
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于遗传算法的优化问题求解
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何在GitHub上创建个人博客
  • 1.Ext JS 建立web开发工程
  • k8s使用glusterfs实现动态持久化存储
  • 湖北分布式智能数据采集方法有哪些?
  • ​低代码平台的核心价值与优势
  • # Java NIO(一)FileChannel
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • #Ubuntu(修改root信息)
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $GOPATH/go.mod exists but should not goland
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (SERIES12)DM性能优化
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (二)linux使用docker容器运行mysql
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)Oracle存储过程编写经验和优化措施
  • (转)可以带来幸福的一本书
  • .jks文件(JAVA KeyStore)
  • .NET delegate 委托 、 Event 事件