2012-03-01 21 views
6

Chcę wyświetlić obraz z rozszerzeniem *.ico i używam do tego celu Stream. Ale mam taki problem.Używanie usługi Stream do wyświetlania obrazu * .ico

z rozszerzeniem *.jpg, *.bmp ... pokazać Obraz OK, ale *.ico, nie pokazuje

Oto mój kod:

private void OutputStream(string fileName) 
    { 
     try 
     { 
      Stream dataStream = null; 

       SPSecurity.RunWithElevatedPrivileges(delegate() 
       { 
        SPFile spFile = web.GetFile(fileName); 
        dataStream = spFile.OpenBinaryStream(); 
        this.HandleOutputStream(dataStream); 
       }); 

     } 
     catch (System.Threading.ThreadAbortException exTemp) 
     { 
      logger.Error("KBStreamPicture::OutputStream", exTemp); 
     } 
     catch (Exception ex) 
     { 
      //System.Diagnostics.Debug.Write("OutputStream::" + ex); 
      logger.Error("KBStreamPicture::OutputStream", ex); 
     } 
    } 

i

private void HandleOutputStream(Stream dataStream) 
    { 
     const int bufferSize = 16384; //16KB 

     using (Stream file = dataStream) 
     { 
      if (file != null) 
      { 
       this.Page.Response.Clear(); 
       this.Page.Response.Cache.SetCacheability(System.Web.HttpCacheability.Private); 
       this.Page.Response.Cache.SetExpires(DateTime.Now.AddMinutes(20)); //only cache 20 minutes 
       byte[] buffer = new byte[bufferSize]; 
       int count = file.Read(buffer, 0, bufferSize); 

       while (count > 0) 
       { 
        if (this.Page.Response.IsClientConnected) 
        { 
         this.Page.Response.OutputStream.Write(buffer, 0, count); 
         count = file.Read(buffer, 0, bufferSize); 
        } 
        else 
        { 
         count = -1; 
        } 
       } 
       this.Page.Response.End(); 
      } 
     } 
    } 

Proszę mi pomóc rozwiązać ten problem.

+0

kod wygląda ok (dziwne nadrzędnym bezpieczeństwa SP, i jasne, dlaczego chcesz spróbować spływają pliki ręcznie, podczas gdy powinny być już dostępne url ...). Masz problem ze zdobyciem strumienia pliku na serwerze lub renderowaniem w przeglądarce (nie oczekuję, że ICO będzie renderować jako znacznik IMG). –

Odpowiedz

4

Nie ustawiasz właściwości ContentType na Response. Spróbuj ustawić wartość ContentType na image/x-icon (należy pamiętać, że "poprawny" typ zawartości może być image/vnd.microsoft.icon, ale wydaje się, że this post może napotkać na problemy z tym typem).

Kod powinien wyglądać mniej więcej tak:

this.Page.Response.Clear(); 
this.Page.Response.Cache.SetCacheability(System.Web.HttpCacheability.Private); 
this.Page.Response.Cache.SetExpires(DateTime.Now.AddMinutes(20)); 
this.Page.Response.ContentType = "image/x-icon"; 
+0

Dziękuję za pomoc. Pracowałem dla mnie w porządku. – user1186850

+0

Znacznik 'user' jako odpowiedź, jeśli działa – Dotnet

+0

@ user1186850 Cieszę się, że mogę pomóc! – rsbarro

Powiązane problemy