2010-12-30 16 views
6

Próbowałem użyć wtyczki jQuery Colorbox do wyświetlania obrazów, które mam w moim DB poprzez plik Ashx. Niestety po prostu wypluwa garść bełkotu na górze strony i nie ma obrazu. Czy można to zrobić? Oto co mam do tej pory:Wyświetl obraz Ashx za pomocą jQuery?

$(document).ready 
    (
     function() 
     { 
      $("a[rel='cbImg']").colorbox(); 
     } 
    ); 
... 
<a rel="cbImg" href="HuntImage.ashx?id=15">Click to see image</a> 

UPDATE:

Mój plik ashx pisze binarny się:

  context.Response.ContentType = "image/bmp"; 
      context.Response.BinaryWrite(ba); 
+0

Co Twój ashx zwraca adres URL obrazu lub obrazu binarnego? – Chandu

+0

Jeśli jest to plik binarny, myślę, że chciałbyś mieć rzeczywisty src dla obrazu przez program obsługi. –

+0

ashx zapisuje plik binarny dla obrazu. @Stefan, możesz to rozwinąć? –

Odpowiedz

10

Colorbox ma opcję "zdjęcie". Jeśli ustawisz to na true w swoim konstruktorze, zmusi to go do renderowania zdjęcia.

$(target).colorbox({photo: true}); 
+0

Interesujące, przyjrzę to. –

+0

@Abe: Udało mi się to z moim treserem. Używam /image.axd jako mojego adresu URL, ale nie rozumiem, dlaczego to nie powinno działać. BTW moją wersją colorbox jest 1.3.16, którą możesz chcieć uaktualnić ... –

0

Powinieneś ustawienie atrybutu src w po stronie klienta.

<img src="HuntImage.ashx?id=15" ..../> 

Handler

public class ImageRequestHandler: IHttpHandler, IRequiresSessionState 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      context.Response.Clear(); 

      if(context.Request.QueryString.Count != 0) 
      { 
     //Get the stored image and write in the response. 
       var storedImage = context.Session[_Default.STORED_IMAGE] as byte[]; 
       if (storedImage != null) 
       { 
        Image image = GetImage(storedImage); 
        if (image != null) 
        { 
         context.Response.ContentType = "image/jpeg"; 
         image.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
        } 
       } 
      } 
     } 

     private Image GetImage(byte[] storedImage) 
     { 
      var stream = new MemoryStream(storedImage); 
      return Image.FromStream(stream); 
     } 

     public bool IsReusable 
     { 
      get { return false; } 
     } 
    } 
+0

Nie bardzo rozumiem, co masz na myśli. Czy możesz podać mi przykład? –

+0

@Abe Miessler: Edytowano odpowiedź. – dhinesh

+0

OP chce wyświetlić obraz, gdy użytkownik kliknie link ... – Chandu

0

Wydaje się, że nie mogę robić to, co próbuję za pomocą ColorBox z ashx obrazu. Jeśli ktoś znajdzie sposób, opublikuj go tutaj.

Zastanawiam się nad usunięciem tego pytania, ale zostawię go, gdy ktoś inny wpadnie na ten sam problem.

+2

Zobacz odpowiedź Jamesa South'a, trafia na miejsce! –

0

Znajdź tę funkcję wokół linii 124 (Colorbox 1.3.15)

// Checks an href to see if it is a photo. 
// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex. 
function isImage(url) { 
    return settings.photo || /\.(gif|png|jpg|jpeg|bmp)(?:\?([^#]*))?(?:#(\.*))?$/i.test(url); 
} 

Na linii 127, dodać |ashx po bmp w (gif|png|jpg|jpeg|bmp) tak to brzmi tak:

// Checks an href to see if it is a photo. 
// There is a force photo option (photo: true) for hrefs that cannot be matched by this regex. 
function isImage(url) { 
    return settings.photo || /\.(gif|png|jpg|jpeg|bmp|ashx)(?:\?([^#]*))?(?:#(\.*))?$/i.test(url); 
} 

ten działa tylko dobrze dla mnie w Sitecore 6.2 :)

+0

Bardzo interesujące. Dam ci ten strzał i dam ci znać, jak to działa. –