2010-12-30 13 views
6

He estado tratando de usar el complemento jQuery Colorbox para mostrar las imágenes que tengo en mi base de datos a través de un archivo ashx. Desafortunadamente solo escupe un montón de galimatías en la parte superior de la página y no hay imagen. Se puede hacer esto? Aquí es lo que tengo hasta ahora:¿Visualizas una imagen ashx usando jQuery?

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

ACTUALIZACIÓN:

Mi archivo ashx está escribiendo el binario Salida:

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

¿Qué devuelve su ashx una URL para la imagen o la imagen binaria? – Chandu

+0

Si es el binario, creo que le gustaría tener el src real para la imagen por parte del controlador. –

+0

el ashx escribe el binario para la imagen. @Stefan, ¿puedes ampliar eso? –

Respuesta

10

Colorbox tiene la opción 'foto'. Si establece esto como verdadero en su constructor, lo forzará a procesar la foto.

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

Interesante, voy a echar un vistazo a esto. –

+0

@Abe: funcionó para mí con mi controlador. Estoy usando /image.axd como mi url pero no puedo ver por qué no debería funcionar para usted. Por cierto, mi versión colorbox es 1.3.16 es posible que desee actualizar ... –

0

Usted debe establecer el atributo src en el lado del cliente.

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

El manejador

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

No entiendo muy bien a qué te refieres. ¿Podrías darme un ejemplo? –

+0

@Abe Miessler: Editado la respuesta. – dhinesh

+0

OP quiere mostrar la imagen una vez que un usuario hace clic en el enlace ... – Chandu

0

Parece que no puedo hacer lo que estoy tratando usando colorbox una imagen con ashx. Si alguien encuentra una manera, publícala aquí.

Consideré eliminar la pregunta pero la dejaré en caso de que alguien más se encuentre con el mismo problema.

+2

¡Vea la respuesta de James South, golpea el punto! –

0

Encuentra esta función alrededor de la línea 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); 
} 

En la línea 127, después de añadir |ashx bmp en (gif|png|jpg|jpeg|bmp) para que se lea así:

// 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); 
} 

Esto está trabajando solo bien para mí en Sitecore 6.2 :)

+0

Muy interesante. Le daré una oportunidad y le dejaré saber cómo va. –

Cuestiones relacionadas