这个问题与这个有关:Cannot render image to HttpContext.Response.OutputStream。它不是重复的。
尝试将 PNG 保存到 Response.OutputStream 时,我在本地开发环境和生产环境之间遇到了不一致的行为。也就是说,我使用的代码最初在本地运行良好,但在生产服务器上失败了。
这是在本地工作的原始代码:
using (Bitmap bmp = challenge.RenderImage()) {
bmp.Save(context.Response.OutputStream, ImageFormat.Png);
}
尽管在本地工作,但当我在生产服务器上部署它时,我收到了一个应用程序错误:
GDI+ 中出现一般错误。
经过一番挖掘,我确定问题出在“保存 PNG 图像需要一个可搜索的流”这一事实。' - Response.OutputStream 不是。通过首先将位图写入 System.IO.MemoryStream,然后写入 Response.OutputStream,这个问题很容易得到缓解。
using (Bitmap bmp = challenge.RenderImage()) {
using(MemoryStream ms = new MemoryStream()) {
bmp.Save(ms, ImageFormat.Png);
ms.WriteTo(context.Response.OutputStream);
}
}
我很想知道为什么原始代码在本地运行良好,但在生产服务器上却失败了?代码失败背后的原因对我来说听起来很黑白,所以我不明白为什么会存在特定于环境的不一致。