【排查解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误

简介: 【排查解决】System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误

前言:

  今天项目发布上线,发布到正式环境验证功能的时候忽然方向之前做的一个图片合成的功能报错了提示:System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误。也就是说应用的System.Drawing中的Bitmap的这个类中的属性出了问题,这到底是什么问题呢?首先我本地开发,测试环境都可以正常的,为什么已发布到正式环境就有问题了呢,到底是环境问题还是配置权限的问题呢?

代码如下:

/// <summary>
        /// 合成图片
        /// </summary>
        /// <param name="backgroundImage">背景图</param>
        /// <param name="qrCodeImg">二维码图片</param>
        /// <param name="savePhysicalPath">图片存放物理路径</param>
        /// <param name="xDeviation">绘制图像X轴偏差</param>
        /// <param name="yDeviation">绘制图像Y轴偏差</param>
        /// <param name="width">绘制图像宽</param>
        /// <param name="height">绘制图像高</param>
        /// <returns></returns>
        public string CompositePicture(Image backgroundImage, Image qrCodeImg, string savePhysicalPath, int xDeviation = 0, int yDeviation = 0, int width = 0, int height = 0)
        {
            Bitmap bitmap = new Bitmap(backgroundImage.Width, backgroundImage.Height);
            Graphics graphics = Graphics.FromImage(bitmap);//绘图
            graphics.Clear(Color.White);
            SolidBrush surush = new SolidBrush(Color.White);
            graphics.DrawImage(backgroundImage, 0, 0, backgroundImage.Width, backgroundImage.Height);
            graphics.DrawImage(qrCodeImg, xDeviation, yDeviation, width, height);
            GC.Collect();//垃圾清理
            string compositePictureUrl = savePhysicalPath + Guid.NewGuid().ToString() + ".jpg";
            //合成图片保存
            bitmap.Save(compositePictureUrl, System.Drawing.Imaging.ImageFormat.Jpeg);
            return compositePictureUrl;
        }

解决方案:

1、首先我排除了一下线上服务器是否存在savePhysicalPath图片存放的物理路径(我发布合成的图片保存的物理物理为/Content/Image)查看确实存在,因为之前在程序中写过判断文件夹是否存在不存在创建文件夹的逻辑。

if (!Directory.Exists(savePhysicalPath))
{
    Directory.CreateDirectory(savePhysicalPath);
}

2、判断文件Image是否存在读写的权限(让服务器管理员查了下果然是没有权限的),把权限的读写权限开通后就一切正常了。

1336199-20210604155138713-1399387777.png

 

相关文章
|
3月前
|
运维 数据可视化 NoSQL
系统日志规范问题之在循环中打印INFO级别日志的反例如何解决
系统日志规范问题之在循环中打印INFO级别日志的反例如何解决
|
4月前
|
Java API
Java演进问题之如果程序不满足"closed-world"假设,Substrate VM如何解决
Java演进问题之如果程序不满足"closed-world"假设,Substrate VM如何解决
|
5月前
|
Java
JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)
JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)
40 1
|
4月前
|
存储 数据库
cannot read properties of underfined (reading ‘code‘),别光知道抄,有的时候,细节就是影响全局关键,别人代码到你项目不一定100%正确,判断bug出
cannot read properties of underfined (reading ‘code‘),别光知道抄,有的时候,细节就是影响全局关键,别人代码到你项目不一定100%正确,判断bug出
|
6月前
,出现了一个RPA(机器人流程自动化)的运行异常,具体错误为 `rpa.core.errors.RPATimeoutError`
【2月更文挑战第21天】,出现了一个RPA(机器人流程自动化)的运行异常,具体错误为 `rpa.core.errors.RPATimeoutError`
391 2
|
运维 Prometheus 监控
java异常 | 处理规范、全局异常、Error处理
java异常 | 处理规范、全局异常、Error处理
|
6月前
|
移动开发 监控 Java
mPaas常见问题之运行时出现libsgmain 的 native 错误如何解决
mPaaS(移动平台即服务,Mobile Platform as a Service)是阿里巴巴集团提供的一套移动开发解决方案,它包含了一系列移动开发、测试、监控和运营的工具和服务。以下是mPaaS常见问题的汇总,旨在帮助开发者和企业用户解决在使用mPaaS产品过程中遇到的各种挑战
|
传感器 IDE 开发工具
排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right
排错实战 —— 解决 c++ 工程编译错: error C2059 'string' illegal token on right
常见的bug---4、在DataGrip上跑本地模式报return 2异常
常见的bug---4、在DataGrip上跑本地模式报return 2异常
|
Java Maven
解决:Error:java: 无效的目标发行版: 11错误问题
解决:Error:java: 无效的目标发行版: 11错误问题
解决:Error:java: 无效的目标发行版: 11错误问题