Enlaces e información

Comenta lo que creas oportuno.


Otros posts
La importancia del testing
Apuntes para RJS

Flex: Mostrar imágen desde un servicio XML

Escrito por Roberto M. Oliva en Julio 30th, 2007

Pongo esta entrada porque me han pedido desde el grupo de Madeinflex más información de como mostrar una imágen desde un servicio XML.

La idea es que tenemos una imágen almacenada en un servidor tal cual o embebida en una base de datos. Programamos un servicio que devuelva dicha imágen en formato Base64. No voy a entrar en como desarrollar este servicio, ya que dependerá de la tecnología utilizada: Rails, ASP.NET, PHP, Coldfusion, etc. Pero la idea es que dicho servicio cargue la foto desde la base de datos o desde el fichero físico y la codifique en Base64 para enviarla dentro de un XML al cliente Flex. Si os sirve de ayuda, nosotros lo hacemos así porque almacenamos la foto, tal cual en formato Base64, en un campo de tipo Text dentro de la base de datos. Este servicio, devolverá un XML similar al siguiente que, como se puede ver, es fácil diseñarlo para poder enviar varias fotos de golpe:


En Flex, tendremos un Command (programamos utilizando Cairngorm), que, apoyándose en un Bussiness Delgate, se descarga el XML en un objeto del ModelLocator accesible por la aplicación.

En el formulario de visualización de la foto, ponemos un campo imágen:


Y luego un script que permita interpretar el objeto XML descargado anteriormente para asignárselo al source de la imágen:


Resumiendo:
- Cargamos en un XML los datos del servicio.
- Llamamos a la funcion: loadImage, para que lea dicho XML y se lo asigne a un control de tipo: Image.

He desarrollado un proyecto que contiene un ejemplo completo de lo aquí expuesto: LoadImage.rar. Es importante leer el fichero README.TXT



Escriba un comentario

Dediquele un momento a comentar lo que piensa. Esta permitido usar HTML básico para formatear el escrito.

Comentarios de los lectores

Hola Roberto:
tu scrot parece muy bueno pero no lo puedo hacer andar mefalta los import de las clases que usas.
esta todo dentro el Framework?
Saludos y Gracias

Hola Lucas!
Perdona por el restraso en la contestacion, pero las vacaciones han pillado por medio. Espero que no llegue demasiado tarde :(

Los imports de la funcion loadImage son los siguientes:

import mx.controls.Image;

import mx.core.Container;

import mx.rpc.http.mxml.HTTPService;

import mx.utils.Base64Decoder;

import mx.rpc.events.ResultEvent;

import mx.containers.Panel;

import mx.controls.Alert;

Espero que te ayude
Un saludo!

Hola Roberto!
Muy útil este post para lo que necesito. Un webservice que me devuelve una imagen en bytes codificada en base64 y una manera en Flex para decodificarla y cargarla. Lo malo es que no me va. Como indicas en el post el ‘loader.loadBytes(bytes);’ se ejecuta antes que la definición de los listeners. Esto es algo que me choca, porque entiendo que la carga se realiza en el momento que se ejecuta la sentencia loadBytes. Si la sentencia loadBytes la ejecuto despues de la definición de los listeners, la respuesta siempre va por la función definida para gestionar el error de carga de la imagen. Si sabes algo de porque me puede estar pasando.
Un saludo y gracias!!

Hola Roberto, tengo el mismo problema que José pues he testeado la aplicación y no entra a ninguna de las funciones definidas es decir: imgError ni tampoco a imgLoaded; una vez que se han cargado los AddEventListener.
Saludos
Franz

Ummm… lo de los listeners, si es posible que sea así y que a nosotros no nos de problemas, porque no termina de cargar la imágen antes de tener asignados dichos listeners.

He desarrollado un ejemplo completo de la técnica. Lo único que se me ocurre, por lo que os pueda fallar, es porque no esperáis a cargar los datos XML con el Code64 de las fotos. Probad el ejemplo que acompaña al artículo y me comentáis.