【发布时间】:2019-11-01 09:52:15
【问题描述】:
用户上传的 PNG 文件看起来好像以某种方式损坏。但最大的问题是,每当我们的系统尝试对其进行缩略图时,整个应用程序池都会崩溃并重新启动。我已经尝试使用直接 URL 并在 try ... catch 块中使用代码。
这是图片的副本:https://drive.google.com/file/d/1GpmnIbia3rtqfKrhpg_nKHpjxdC-AxR3
如果我将它加载到 Paint.NET 并再次保存它,它工作正常,所以我很满意图像存在问题。但是我需要阻止任何损坏的图像完全使我的网络应用程序崩溃。我很乐意处理并记录错误,但我需要一切正常继续。
例如,作为测试在本地运行,我可以直接查看图像而不会出现问题。浏览器不介意:
http://localhost:60148/Content/artwork/2019/06/img_0021-9.png
但如果我尝试缩略图版本:
http://localhost:60148/Content/artwork/2019/06/img_0021-9.png?w=160&mode=max&otf=y&quality=90&format=jpg&bgcolor=white
Visual Studio 将报告以下内容并停止调试:
System.BadImageFormatException: 'An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)'
我有一些旧代码也可以将缩略图写入响应流。即使这是在 try catch 中,VS 在报告错误后仍然会停止调试。我有本地和全局错误处理,所以我不会期望崩溃。
try
{
ImageBuilder.Current.Build(pathname.StartsWith("/") ? "~" + pathname : pathname, outputStream,
new ResizeSettings(resizeSettings));
}
catch (Exception ex)
{
Console.WriteLine("Could not output to stream: " + ex.Message);
}
在这种方法上,我尝试添加以下属性但没有成功:
[HandleProcessCorruptedStateExceptions]
和
[SecurityCritical]
我尝试将它放在它自己的任务中,希望它能本地化它,但没有任何乐趣。反正也无所谓。我们几乎只为 ImageResizer 使用 URL,这正在扼杀我们的网络池。
这不仅仅是在本地。之所以注意到这一点,是因为我们将它作为一个测试版网站运行,它正在扼杀它。
【问题讨论】:
标签: png imageresizer