GDI + общая ошибка ASP.NET MVC - PullRequest
       12

GDI + общая ошибка ASP.NET MVC

2 голосов
/ 01 февраля 2010

У меня общая ошибка 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): в GDI + произошла общая ошибка.]
System.Drawing.Image.Save (Поток потока, кодер ImageCodecInfo, EncoderParameters encoderParams) +378002 System.Drawing.Image.Save (потоковый поток, формат ImageFormat) + 36
Havana.ImageResult.ExecuteResult (контекст ControllerContext) в C: \ DropBox \ My Dropbox \ Havana \ Havana.MVC \ Infrastructure \ ImageResult.cs:44 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult (ControllerContext controllerContext, ActionResult actionResult) + 10
System.Web.Mvc. <> C__DisplayClass11.b__e () +20 System.Web.Mvc.CilterInilFilctionFilctionInctionFormResultExecutingContext 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, строка actionName) +399 System.Web.Mvc.Controller.ExecuCoreCoreCore ().Web.Mvc.ControllerBase.Execute (RequestContext requireestContext) + 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.Sec..Web.HttpApplication.IExecutionStep.Execute () +181 System.Web.HttpApplication.ExecuteStep (шаг IExecutionStep, логический и завершенный в синхронном режиме) + 75

1 Ответ

2 голосов
/ 03 февраля 2010

Я нашел решение для этого, как правило, практическое правило и все, что я нашел, указывают пальцем на права безопасности для папки, из которой вы читаете изображение. Однако это не всегда так.

Только когда я действительно вошел на сервер с помощью своего удаленного доступа и прошел по коду, чтобы увидеть, где он получает Общее исключение GDI + ..., я смог найти отличную статью о Рике Строле. блог с моим решением. Распространенные проблемы с преобразованием растровых изображений в выходной поток ASP.NET

По сути, все сводится к тому, что вы должны обязательно избавиться от исходного объекта, когда закончите с ним. например, в моем действии 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 +

...