GDI +通用错误ASP.NET MVC

时间:2010-02-01 16:34:10

标签: asp.net-mvc gdi+

我有一个GDI +泛型错误我已经尝试了所有人都说的确保包含正在读取的图像文件的文件夹

  public ImageResult ProfileAsset(string profile, int width, int height) {
            PhotoDB imgstr = new PhotoDB();

            Image FullsizeImage = Image.FromFile(
                imgstr.getFilePath(profile, false, PhotoDB.PhotoSize.None)
                );


            Image cropedImage = imgstr.Crop(FullsizeImage, width, width, PhotoDB.AnchorPosition.Center);
            return new ImageResult { Image = cropedImage, ImageFormat = ImageFormat.Png };
        }

我已将该文件夹的权限设置为所有人,但仍然出现此错误?

任何想法为什么?

  

GDI +中发生了一般性错误。   描述:未处理的异常   在执行期间发生   当前的网络请求。请查看   堆栈跟踪以获取更多信息   错误及其来源   代码。

     

异常详细信息:   System.Runtime.InteropServices.ExternalException:   GDI +中发生了一般错误。

     

来源错误:

     

生成了未处理的异常   在执行当前   网络请求。有关的信息   异常的起源和位置   可以使用例外来识别   堆栈跟踪下面。

     

堆栈追踪:

     

[ExternalException(0x80004005):A   GDI +中发生了一般错误。]   System.Drawing.Image.Save(流   stream,ImageCodecInfo编码器,   EncoderParameters encoderParams)   +378002 System.Drawing.Image.Save(Stream   流,ImageFormat格式)+36
  Havana.ImageResult.ExecuteResult(ControllerContext   C:\ DropBox \ My中的上下文)   Dropbox的\哈瓦那\ Havana.MVC \基础设施\ ImageResult.cs:44   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext   controllerContext,ActionResult   actionResult)+10
  System.Web.Mvc&LT;&GT; c__DisplayClass11.b__e()   +20 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter   filter,ResultExecutingContext   preContext,Func 1 continuation) +251 System.Web.Mvc.<>c__DisplayClass13.<InvokeActionResultWithFilters>b__10() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1个过滤器,   ActionResult actionResult)+178
  System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext   controllerContext,String actionName)   +399 System.Web.Mvc.Controller.ExecuteCore()   +126 System.Web.Mvc.ControllerBase.Execute(RequestContext   requestContext)+27
  System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(的RequestContext   requestContext)+7
  System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase   httpContext)+151
  System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext的   httpContext)+57
  System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext的   httpContext)+7
  System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()   +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep   步,布尔&amp; completedSynchronously)   75

1 个答案:

答案 0 :(得分:2)

我找到了解决方案,通常是经验法则和我发现的所有东西都指向了你正在读取图像的文件夹的安全权限。然而情况并非如此。

直到我通过远程访问实际进入服务器,然后逐步查看代码才能看到GDI + Generic Exception ...我能找到一篇关于Rick Strahl的精彩文章博客与我的解决方案。 Common problems with rendiering bitmaps into ASP.NET Output stream

基本上,它归结为你必须确保在完成它时处理原始对象。 例如,在我的ImageResult动作中,我做了这个

    Image FullsizeImage = Image.FromFile(
        imgstr.getFilePath(profile, false, PhotoDB.PhotoSize.None)
        );


    Image cropedImage = imgstr.Crop(FullsizeImage, width, width, PhotoDB.AnchorPosition.Center);
    FullsizeImage.Dispose();

注意我使用它并将它放入croppedImage后我处理它..我之前没有这样做..所以我得到了GDI +异常