将图像输出到输出流时,是否需要临时存储?我得到了"通用GDI+"错误,这通常与将图像保存到文件时的文件夹权限错误有关.

我对图像所做的唯一一件事就是添加一些文本.即使我直接输出图像而不做任何修改,我仍然会出错.例如,这样做会产生错误:

using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png")))
{
    image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);
}

在我的本地机器上运行Windows 7和IIS 7.5及ASP,一切正常.NET 2.0.问题发生在运行带有IIS 6和ASP的Windows server 2003的QA服务器上.NET 2.0.

给出错误的行是:

image.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);

以下是堆栈跟踪:

[ExternalException (0x80004005): A generic error occurred in GDI+.]
   System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) +378002
   System.Drawing.Image.Save(Stream stream, ImageFormat format) +36
   GetRating.ProcessRequest(HttpContext context) in d:\inetpub\wwwroot\SymInfoQA\Apps\tools\Rating\GetRating.ashx:54
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

推荐答案

PNG(和其他格式)需要保存到可查找的流.使用中间体MemoryStream可以做到这一点:

using (Bitmap image = new Bitmap(context.Server.MapPath("images/stars_5.png")))
{
   using(MemoryStream ms = new MemoryStream())
   {
      image.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
      ms.WriteTo(context.Response.OutputStream);
   }
}

Asp.net相关问答推荐

在 Web.Config 中模拟标签

指定的 CGI 应用程序遇到错误,服务器终止了进程

ASP.Net - App_Data & App_Code 文件夹?

Azure Service Fabric 是否与 Docker 做同样的事情?

静态字段与会话变量

VS2013发布Web部署任务失败文件正在使用中

在控制器 asp.net mvc 5 的视图上显示错误消息

忽略默认文档的表单身份验证

如何在 Visual Studio 2017 中使用 NPM 并安装包?

如何使用 app_GlobalResource 或 app_LocalResource?

如何在新实现的接口或基类之间做出决定?

asp.net 有控制台日志(log)吗?

将当前谷歌 map 保存为图片

VS2017 无法加载文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依赖项之一

如何在 ASP.NET 中通过 LAN 访问您的网站

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

模型是否包含字段而不将其添加到数据库中?

路由模板分隔符/不能连续出现 - 属性路由问题

人们使用 JScript.Net 的目的是什么?

IronRuby死了吗?