2012-02-13 50 views
2

我試圖在ASP.NET網頁中顯示數據庫中的圖像。我使用的是通用處理程序,它在firefox,chrome和IE9上運行良好,但在IE8中卻不行。這是我的通用處理器代碼:ASP.NET在IE8中不顯示數據庫中的圖像

public void ProcessRequest(HttpContext context) 
    { 
     byte[] FileContent = null; 
     if (context.Request.QueryString["imagen"] != null) 
     { 
      FileContent = GetImageFromDatabase(context.Request.QueryString["imagen"]); 
      context.Response.ContentType = "image/png"; 
      context.Response.BinaryWrite(FileContent); 
     } 
    } 

我和我的ASP頁面標記有一個形象:

<asp:Image ID="imgInicio" runat="server" Width="100%" AlternateText="Inicio" /> 

最後我把這種負載事件;

imgInicio.ImageUrl = String.Format(@"~/ShowImage.ashx?imagen={0}", idImage); 

我試過了。任何幫助,將不勝感激。

+3

你能發佈生成的HTML嗎? – 2012-02-13 22:02:24

+0

這看起來好像不會被瀏覽器破壞。也許你有沒有在IE8中工作的CSS規則導致圖像不出現? – vcsjones 2012-02-13 22:02:45

+0

是的,魯本斯,我寫它不好,是在這兩個地方的形象 – 2012-02-13 22:07:32

回答

0

問題解決

我找到了解決辦法。我不知道爲什麼在Internet Explorer 8中必須指定圖像的格式。我必須編寫代碼來使用System.Drawing命名空間來格式化它。我添加了一個輔助類以下方法:

public static Image ImageFromBytes(byte[] buffer) 
    { 
     try 
     { 
      using (MemoryStream ms = new MemoryStream(buffer)) 
      { 
       return Image.FromStream(ms); 
      } 
     } 
     catch 
     { 
      return null; 
     } 
    } 
    public static byte[] FormatImage(byte[] buffer, ImageFormat format) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      using (Image img = ImageFromBytes(buffer)) 
      { 
       img.Save(ms, format); 
      } 
      return ms.ToArray(); 
     } 
    } 

然後我打電話處理器內部的mehod:

context.Response.BinaryWrite(ImageHelper.FormatImage(FileContent, System.Drawing.Imaging.ImageFormat.Png)); 

我認爲,當我們轉換字節爲System.Drawing.Image對象然後使用Save方法再次檢索字節,框架會執行某些操作,可能會添加或刪除一些其他瀏覽器忽略的字節,但它們對於Internet Explorer 8很重要。這就是我的想法,但並不確定。事情是,它適用於我

1

您有幾種可能性,調試這樣的情況:

  • 坐落在的ProcessRequest斷點找出IE是否要求將圖像從服務器

  • 使用開發工具(F12)找到輸出圖像是否加載到頁面中,但未渲染

  • 使用開發工具更改兼容性和文檔類型設置(它們在IE8中是否可用?)並查看這些陳述GES對圖像渲染

  • 確保圖像確實保存並擔任巴紐當他們png格式的Web服務器要求(有些瀏覽器可能是MIME類型比其他人更容易)

  • 任何影響

    在呈現圖像的瀏覽器中,將圖像下載到本地硬盤並使用圖像查看器確認圖像格式確實是png

  • 驗證問題與早期IE的alpha通道和透明度無關問題

+0

謝謝,我要試試這個。還有一個問題,我如何才能知道圖像是否加載到頁面中,但不是使用開發人員工具(F12)渲染的? – 2012-02-13 22:27:35

+0

您可以導航DevTools中的HTML樹並選擇樹中包含的任何元素。所選元素將在IE中通過藍色框突出顯示。這只是一個猜測它可能有幫助 – devio 2012-02-13 22:33:37

+0

我已經檢查過,並且我看到圖像在那裏,因爲當我將de頁面保存爲完整的網頁時,IE下載圖像,如果我用chrome打開此下載的網頁或火狐我可以看到圖像。我認爲該圖像已加載但未呈現 – 2012-02-13 23:21:03

-1

通過在SQL Server Management Studio中運行查詢開始 - 或者其他一些方式,肯定確認有數據返回。

檢查數據實際上是否在數據庫中?你在數據庫中使用圖像字段嗎?

從與IE相關的問題來看,沒有什麼建議。如果上述步驟確認數據的存在和返回,請繼續執行devio的步驟。

UPDATE

每一次反饋它肯定看起來像一個IE8(或更早)/ PNG問題。

+0

謝謝,我可以看到圖像在數據庫中保存爲圖像數據類型。當我調試處理程序時,我看到那裏有字節數組。而且,至於它在其他瀏覽器上的作品,我認爲這是一個IE問題,但我還不知道 – 2012-02-13 23:46:22

+0

你試過用JPEG嗎? (只是爲了縮小內容類型的問題)。另外,如果這是在某種重複控制中,您爲IsReusable屬性設置了什麼布爾類型? – IrishChieftain 2012-02-13 23:48:21

+0

也檢查了這一點:http://stackoverflow.com/questions/4090204/png-images-not-rendering-correctly-in-ie7-ie8 – IrishChieftain 2012-02-13 23:50:10

1

我有問題與圖像顯示在ie8破碎,而不是在任何其他瀏覽器,並且事實證明,我的.jpg圖像意外保存爲CMYK而不是RGB。 Chrome,Safari,Firefox,ie9沒有任何問題,只是ie8顯示它們已損壞。

0

我的數據庫無法正常工作,但所有其他瀏覽器的Internet Explorer 8圖像都出現同樣的問題。

我用BinaryWrite。我正在BinaryWrite和OutputStream.write之間進行性能測試。

OutputStream.write更具性能,它的使用是否會設置所有問題。它在我身邊設置我的問題。

url:http://www.dotnetperls.com/response-binarywrite

+0

你在問一個問題嗎?如果是這樣,請將其作爲新問題發佈。 – 2013-09-24 15:01:03