Buenos días, estoy haciendo una aplicación de movil, y me gustaria saber si con cirrus puedo pasar imagenes al movil.Ya veo datos y me gustaria saber si se puede.En caso de que la respuesta sea negativa me gustaria saber como hacerlo.
Muchas gracias, lo que quiero evitar es montar un servidor web, ya que cirrus me deja recibir información sin montar nada, cosa que es una MARAVILLA, era saber eso.
Hola, alguien pudo probarlo o sabe enviar imagenes?
Yo he probado codificacion Base64 como dijo Bitcodesoft directamente en el codigo html y funciona, pero no se enviar la imagen en esa codificacion desde mi variable VImage recogida desde una de mis tablas.
Es complejo… pero se puede. Hacerlo en binario es difícil y poco funcional por culpa de la poca flexibilidad del protocolo tcp/ip. Como bien apuntas se puede hacer en base64 y con algunas mejoras en cirrus. Puedes ver la solución dentro del código fuente de PaaSOS
Buenos días, lo puedes hacer al vuelo para que cuando se pida una imagen la convierta a base 64 y así no te ocupe doble espacio en disco, pero hay un bug que no permite la conversión de una imagen en la base de datos a base 64 sin pasar previamente por guardar en disco y leerlo, así que por el momento, eso no lo veo factible, ya que en caso de ser muchas imágenes ralentizaría mucho.
Si quieres, cuando guardas una imagen, puedes hacer lo siguiente desde un evento de un formulario y guardar la imagen tanto en formato binario como base 64
//Importamos la clase para su uso
importClass("VImage");
//Guardamos la senda del fichero a añadir
var senda = theMainWindow.fileDialogGetOpenFileName( "Seleccione la foto. Recomendamos que sea de 90x90 y ha de ser formato png.", "", "*.png");
//Creamos la imagen
var img = new VImage();
if ( img.load(senda) )
{
//Capturamos el campo imagen
var edFoto = theRoot.dataView().control("IMG");
//Si es mayor que lo parametrizado, lo escalamos
var anchoMaximo = 90;
edFoto.readOnly = 0;
edFoto.setImage(img.scaledToWidth(anchoMaximo, 0));
edFoto.readOnly = 1;
var imagenByteArray = new VByteArray();
imagenByteArray = img.saveToData("PNG", -1);
imagenBase64Txt = imagenByteArray.toBase64().toLatin1String();
theRegisterIn.setField("IMG B64", imagenBase64Txt )
theRoot.dataView().updateControls();
}
else
alert("No se ha podido cargar la imagen");
Ahora sólo te quedaría retornar el valor del campo objeto texto que contiene el “churro” del base 64 en cirrus. Nosotros lo utilizamos y va perfecto.
Estuve haciendo pruebas y el proceso de convertir a Base64 funciona bien pero lo malo era cargar el archivo desde la base de datos, yo pense que el problema era por el bug que decia Mario y empecé a coger las imagenes de la tabla y a pasarlas a disco y funcionaba, pero al final vi que era un problema de archivos nulos y he podido hacer el proceso de forma directa y me parece que carga bastante rapido.
Es decir cojo la imagen de la base de datos como VImage, lo transformo a VByteArray y lo paso a Base64 del tiron sin pasar por disco. Mas o menos como el codigo de Mario.
Esto mismo cre que tambien podrá servir para envio de archivos, cosa que tengo pendiente de probar. Muchas gracias
Si claro.
Esto a simple vista es lo que cualquiera pensaria que debe funcionar, y la verdad funciona, pero cuidado:
var articulo = articulos.readAt(z)
var foto = articulo.fieldToImage("FOT")
var fotoB64 = foto.saveToData("PNG", -1) //fallo del proceso si no hay imagen
fotoB64 = fotoB64 .toBase64().toLatin1String()
articulosWeb.push({foto: fotoB64})
porque si el campo imagen esta vacio el proceso falla y no devuelve nada a cirrus. Esto me hizo pensar que era el bug, pero no hay bug que yo sepa en esta version 7.16. Tu codigo no falla porque la imagen esta cargada de un archivo, con lo que no hay fallo de imagen vacia nunca. Incluso si intentas:
if(!foto.isNull()){ //tambien rompe el proceso si está vacia la imagen y cirrus no devuelve nada,
// y me duele que rompa una funcion .isNull(), me hace perder el tiempo
var fotoB64 = foto.saveToData("PNG", -1) //fallo del proceso si no hay imagen
fotoB64 = fotoB64 .toBase64().toLatin1String()
articulosWeb.push({foto: fotoB64})
}
Así que si todos los campos imagen estan rellenos aunque sea una imagen blanca, el proceso .toB64() no falla. Es una tonteria pero justo que todas las pruebas las haces con 10 registros, no todos tienen imagen, para que rompa el proceso. Suerte que probe con un unico registro en la tabla que si tenia imagen.