Общая ошибка произошла в GDI + ошибка при отображении загруженных изображений

Я использую следующий код, чтобы показать изображение, которое было сохранено в моей базе данных из моего приложения asp.net mvc (C #) :.

    public ActionResult GetSiteHeaderLogo()
        {
            SiteHeader _siteHeader = new SiteHeader();
            Image imgImage = null;

            long userId = Utility.GetUserIdFromSession();

            if (userId > 0)
            {
                _siteHeader = this.siteBLL.GetSiteHeaderLogo(userId);

                if (_siteHeader.Logo != null && _siteHeader.Logo.Length > 0)
                {
                    byte[] _imageBytes = _siteHeader.Logo;
                    if (_imageBytes != null)
                    {
                        using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream(_imageBytes))
                        {
                             imgImage = Image.FromStream(imageStream);
                        }
                    }
                    string sFileExtension = _siteHeader.FileName.Substring(_siteHeader.FileName.IndexOf('.') + 1, 

_siteHeader.FileName.Length - (_siteHeader.FileName.IndexOf('.') + 1));

                    Response.ContentType = Utility.GetContentTypeByExtension(sFileExtension.ToLower());
                    Response.Cache.SetCacheability(HttpCacheability.NoCache);
                    Response.BufferOutput = false;
                    if (imgImage != null)
                    {
                         ImageFormat _imageFormat = Utility.GetImageFormat(sFileExtension.ToLower());
                         imgImage.Save(Response.OutputStream, _imageFormat);
                         imgImage.Dispose();
                    }
              }
           }

       return new EmptyResult();
    }

Он отлично работает, когда я загружаю исходное изображение. Но когда я загружаю какие-либо загруженные изображения, возникает следующая ошибка:

 System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
   at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
   at System.Drawing.Image.Save(Stream stream, ImageFormat format)

Для. Пример: Когда я загружаю исходное изображение, оно отображается как логотип на моем сайте, и я загружал этот логотип с сайта, а когда я повторно загружаю то же загруженное изображение, возникает указанная выше ошибка. Мне это кажется очень странным, и я не могу понять, почему это происходит. Есть идеи по этому поводу?


person Prasad    schedule 09.06.2010    source источник


Ответы (2)


Я предполагаю, что ваша проблема здесь:

using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream(_imageBytes)) 

    { 
      imgImage = Image.FromStream(imageStream); 
    } 

Потому что после использования .FromStream изображение владеет потоком и может быть очень расстроено, если вы его закроете. Чтобы убедиться, что проблема в этом, вы можете просто попробовать:

using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream(_imageBytes)) 
{ 
  imgImage = new Bitmap( Image.FromStream(imageStream) ); 
} 
person Dan Byström    schedule 09.06.2010
comment
кодimgImage = новое изображение (Image.FromStream (imageStream)); дает ошибку. = Невозможно создать экземпляр абстрактного класса или интерфейса 'System.Drawing.Image' - person Prasad; 11.06.2010
comment
imgImage = новое растровое изображение (Image.FromStream (imageStream)); работал отлично. Также, когда я использовал imgImage.Save (Response.OutputStream, _imageFormat); внутри, используя метод моего существующего кода, это сработало. - person Prasad; 13.06.2010

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

person Matt Sherman    schedule 10.06.2010
comment
Изображение поступает из базы данных, а не по какому-либо реальному пути. Я получаю эту ошибку, даже когда работаю на localhost. - person Prasad; 11.06.2010