2010-06-09 99 views
1

我使用下面的代碼來顯示已從我的asp.net mvc(C#)應用程序中保存在我的數據庫中的圖像。「顯示上傳圖像時出現GDI +的一般錯誤」錯誤

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) 

對於。例如:當我上傳原始圖像時,它在我的網站上顯示爲徽標,我從該網站下載了該徽標,當我重新上傳相同的下載圖像時,會引發上述錯誤。這對我來說似乎很奇怪,而且無法找到它發生的原因。對此有何想法?

回答

4

我猜你的問題就在這裏:

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)); 
} 
+0

代碼「imgImage = new Image(Image.FromStream(imageStream));」給出錯誤。 =不能創建抽象類或接口的實例'System.Drawing.Image' – Prasad 2010-06-11 03:59:37

+0

對不起。當然是位圖。 :-( – 2010-06-11 08:55:25

+0

imgImage = new Bitmap(Image.FromStream(imageStream));工作完美。另外當我使用「imgImage.Save(Response.OutputStream,_imageFormat);」內部「使用」我的現有代碼的方法,它的工作。 – Prasad 2010-06-13 02:00:05

1

我發現該錯誤通常來自文件訪問問題。聽起來很明顯,我意識到,但仔細檢查文件路徑是否正確,文件是否存在,以及IIS進程是否具有該文件的權限。

+0

圖像來自數據庫,並沒有任何真正的路徑。即使我在本地主機上工作,我也會收到此錯誤。 – Prasad 2010-06-11 03:54:59