2014-02-11 37 views
0

我試圖動態來源圖像,使用頁面綁定數據時呈現到路徑中的ID。但是,圖像在框中顯示爲藍色問號[?]。 iOS,Mobile Chrome,舊版Android瀏覽器(2.3),新版Android瀏覽器(4.2.2)和IE/Firefox/Chrome在桌面上的圖像效果都很好。此問題僅在Android 4.0和4.1上出現(至今)。Webservice來源的圖像顯示爲?在某些版本的股票Android瀏覽器

這是我如何加載圖像:

例如。 <img src="../services/getImage?id=f6c799b2-ff31-4fbc-abc9-31f20d5e69c8">

這個請求命中一個.NET Web服務(IHttpAsyncHandler執行),它看起來像這樣

public virtual UploadedImage getImage(Guid imageId) { 
     string    eTag; 
     Entities.Image.DTO image = null; 
     if 
     (
      image = //get image entity 
     ) 
     { 
      eTag = Delta.Crypto.CreateMD5Hash(image.ModifiedDate.ToEpoch().ToString()); 
      if (Request.Headers[HTTPRequestHeaderKeys.IfNoneMatch].IsNotNullOrEmpty() && Request.Headers[HTTPRequestHeaderKeys.IfNoneMatch] == eTag) 
      { 
       this.RespondWithNoUpdate(); 
       return null; 
      } 
      if (image.ImageUrl.IsNullOrEmpty() || image.ImageContent == null || image.ImageContent.Length == 0) 
      { 
       this.RespondWithNotFound(); 
       return null; 
      } 
      Response.AddHeader(HTTPResponseHeaderKeys.ETag, eTag); 
      return new UploadedImage() 
      { 
       contentType  = "image/" + System.IO.Path.GetExtension(image.ImageUrl).ToLower().Substring(1), 
       fileContents = image.ImageContent, 
       fileName  = image.ImageUrl 
      }; 
     } 
     return null; 

所以,我們正在使用的文件擴展名設置MIME類型,但這可能不是100%可靠,但我已經確認在這些情況下是正確的。

這裏是請求的副本,併成功的響應我的桌面版Chrome瀏覽器 請求: Accept:image/webp,*/*;q=0.8 Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en;q=0.8,es;q=0.6 Connection:keep-alive Host:localhost Referer:http://localhost/delta/events/bigevent/app/event.html User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.107 Safari/537.36

響應:

Cache-Control:no-cache Content-Disposition:inline; filename="2dab739b-a06c-4579-8555-0598d738f858_eventApplayoutContainerEventApplicationlandingScreenImageContainer_background-image.png" Content-Length:236 Content-Type:image/png Date:Tue, 11 Feb 2014 19:53:31 GMT ETag:1c79507d4969ea7534f3068ca1e60be4 Expires:-1 Pragma:no-cache

我唯一的猜測是,請求在此圖像時方式,img控件在渲染時不知道MIME類型,因此抱怨。

注意:直接訪問(在單獨的選項卡中)時,請求在Android瀏覽器上成功。

有沒有人有任何想法可能會導致[?]和潛在的解決方案?如果有任何有關股票瀏覽器的文檔,我一直無法找到很多東西。如果你有一些文件的鏈接,那也將非常感激。謝謝!

編輯:我要指出的相對路徑是資源載入圖像精細

Ex. <img src="../images/EmptyProfile.png">

回答

0

實際上,我是能夠弄清楚這一個。

問題的根源在於,那些版本的Android瀏覽器不會發送帶請求的Accept標頭。

我的webservice嘗試根據客戶端首選項協商內容交付類型。沒有默認值。

希望這可以幫助未來的人!

相關問題