【问题标题】:"A generic error occurred in GDI+" error while showing uploaded images显示上传的图像时出现“GDI+ 中发生一般错误”错误
【发布时间】:2011-03-01 13:03:34
【问题描述】:

我正在使用以下代码显示从我的 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)

为了。例如:当我上传原始图片时,它在我的网站中显示为徽标,我从网站下载了该徽标,当我重新上传相同的下载图片时,它会引发上述错误。这对我来说似乎很奇怪,无法找到它发生的原因。对此有何想法?

【问题讨论】:

    标签: asp.net-mvc image image-processing gdi+


    【解决方案1】:

    我猜你的问题出在这里:

    using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream(_imageBytes)) 
    
        { 
          imgImage = Image.FromStream(imageStream); 
        } 
    

    因为使用 .FromStream 后,Image 拥有流,如果关闭它可能会非常不高兴。要验证这是否是问题,您可以尝试:

    using (System.IO.MemoryStream imageStream = new System.IO.MemoryStream(_imageBytes)) 
    { 
      imgImage = new Bitmap( Image.FromStream(imageStream) ); 
    } 
    

    【讨论】:

    • 代码"imgImage = new Image(Image.FromStream(imageStream));"给出错误。 = 无法创建抽象类或接口“System.Drawing.Image”的实例
    • imgImage = new Bitmap(Image.FromStream(imageStream));工作完美。另外当我使用“imgImage.Save(Response.OutputStream,_imageFormat);”在我现有代码的“使用”方法中,它起作用了。
    【解决方案2】:

    我发现错误通常来自文件访问问题。听起来很明显,我意识到,但请仔细检查文件路径是否正确,文件是否存在,以及 IIS 进程是否有权访问该文件。

    【讨论】:

    • 图像来自数据库,并且不在任何真实路径中。即使我在本地主机上工作,我也会收到此错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    相关资源
    最近更新 更多