none
Jak zobrazit datový stream obrázku v komponentě asp.net?

    Dotaz

  • Potřebuji zobrazit png-obrázek načtený z databáze v asp.net komponentě buď asp:Image nebo jako pozadí buňky asp:Table. Psáno v C#. Obrázek mám načtený (SqlDataReader), převedený do streamu (MemoryStream). Nyní nenacházím cestu/metodu zápisu dat do konkrétní komponenty (buňka asp:Table nebo asp:Image). Děkuji. 
    6. dubna 2012 9:41

Odpovědi

  • Jednou z nevýhod HTML je, ža takto to nijak nejde. Resp. existuje sice věc, která se jmenuje data URI, ale ta se hodí jen pro malé obrázky typu ikony a navíc nevím, jestli funguje všude.

    Standardní postup tedy v tomto případě je vytvořit si handler (něco jako stránka), které pošlete ID záznamu z databáze, v němž máte ten obrázek, a handler pošle obrázek samostatně. Ve stránce pak dáte klasické <img src="handler.ashx?id=14" />, prostě odkážete se na ten handler pomocí URL adresy.

    Handler vytvoříte tak, že do projektu přidáte novou položku typu Generic Handler. Handlery mají příponu ASHX a je to vlastně třída, kde doplníte kód do metody ProcessRequest. Tam si přes context.Request.QueryString["id"] zjistíte ID záznamu, který potřebujete. Kódem si vytáhnete data obrázku do streamu nebo do pole bajtů a vypíšete je na context.Response. Nezapomeňte nastavit context.Response.ContentType třeba na "image/jpg", ať prohlížeč ví, co mu tam leze za data.


    Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz

    6. dubna 2012 10:57
    Přispěvatel

Všechny reakce

  • Jednou z nevýhod HTML je, ža takto to nijak nejde. Resp. existuje sice věc, která se jmenuje data URI, ale ta se hodí jen pro malé obrázky typu ikony a navíc nevím, jestli funguje všude.

    Standardní postup tedy v tomto případě je vytvořit si handler (něco jako stránka), které pošlete ID záznamu z databáze, v němž máte ten obrázek, a handler pošle obrázek samostatně. Ve stránce pak dáte klasické <img src="handler.ashx?id=14" />, prostě odkážete se na ten handler pomocí URL adresy.

    Handler vytvoříte tak, že do projektu přidáte novou položku typu Generic Handler. Handlery mají příponu ASHX a je to vlastně třída, kde doplníte kód do metody ProcessRequest. Tam si přes context.Request.QueryString["id"] zjistíte ID záznamu, který potřebujete. Kódem si vytáhnete data obrázku do streamu nebo do pole bajtů a vypíšete je na context.Response. Nezapomeňte nastavit context.Response.ContentType třeba na "image/jpg", ať prohlížeč ví, co mu tam leze za data.


    Best regards Tomáš Herceg | ASP.NET MVP (http://www.vbnet.cz) Chief Software Architect @ http://www.riganti.cz

    6. dubna 2012 10:57
    Přispěvatel
  • Díky, byl to boj, ale už se zadařilo. Už jsou obrázky na pozadí buněk tabulky vygenerované ze C#.
    6. dubna 2012 13:30