今天在用ASP.NET向Web请求的响应输出流中写入PNG图片时出现了“GDI+ 中发生一般性错误的异常”,使用的方法是直接将图片保存到响应输出流中,引发异常的代码是:
image.Save(Response.OutputStream, ImageFormat.Png);
究其原因是因为PNG图片的解码器需要双向流,而Response中的输出流OutputStream是无法往回读取的,即它的CanSeek属性等于false。
如果要想在该流中写入PNG图片,我们需要将图片的数据预先读取出来,然后以普通数据流的形式将其写入:
// 读取PNG图片数据到内存流 MemoryStream memoryStream = new MemoryStream(); image.Save(memoryStream, ImageFormat.Png); // 将内存流的数据写入到响应输出流 memoryStream.WriteTo(Response.OutputStream); memoryStream.Close();