Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Imagens vía xml

Wop!

Estoy desarrollando una aplicación basada en web en la que necesito mostrar imagenes guardadas en la base de datos. Toda la aplicación funciona mediante xml... y no me gustaría cambiar eso.
Sin usar xml podría montar algun sistema chapucero para hacer referencia a la imagen en el atributo src del tag image... pero el problema es que necesito que el usuario pueda modificar la imagen y guardarla en la BD.
Lo que he descubierto hasta ahora es que la manera de mover binarios dentro de un xml es mediante el formato Base64. Se especifica en el DomElement.dataType el valor "Bin.Base64" y listos.
El problema es... ¿cómo paso de ese formato a uno "normal" como jpg o png? Necesitaré hacerlo en Delphi, para montar el archivo xml en la lectura y para guardarlo, ya que no me parece apropiado guardarlo en Base64. Pero también tendré que realizar ambas conversiones en javascript, para mostrar la imagen al usuario, y, cuando me pasen la nueva, para enviarla al sevidor.
¿Alguien sabe como convertir ese formato? He estado buscando por ahí y no he encontrado nada... excepto algun ocx de VB que preferiría evitar y alguna cosilla para java.
¿Se os ocurre una manera mejor de conseguir lo que intento?
¿Me he explicado fatal y os habéis perdido en la segunda coma?
__________________
E pur si muove
Responder Con Cita
  #2  
Antiguo 11-08-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Los componentes que guardan graficos en delphi, tienen el metodo LoadFromStream.
Basta que los datos extraidos de la base de datos, los metas un un TMemoryStream, y despues cargar esos datos en un componente de imagen usando el metodo LoadFromStream.

Saludos
Miguel
Responder Con Cita
  #3  
Antiguo 11-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Cita:
Empezado por marto
Estoy desarrollando una aplicación basada en web
Me parece que los controles de Delphi me van a ayudar más bien poco
__________________
E pur si muove
Responder Con Cita
  #4  
Antiguo 11-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Lo del lado del servidor parece que lo tengo resuleto con los componentes TIdBase64Encoder - TIdBase64Decoder de las Indy.... pero para la parte javascript, espero sugerencias
__________________
E pur si muove
Responder Con Cita
  #5  
Antiguo 11-08-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Si es una aplicacion web, seria interesante saber en que lenguaje esta
hecho el servidor.
Si usas intraweb o algo parecido la respuesta que te he dado sigue siendo valida. La imagen no es necesario procesarla del lado del cliente, basta que la procese el servidor y la envie en el formato adecuado al cliente.

Saludos
Miguel
Responder Con Cita
  #6  
Antiguo 11-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Wop!

Desconozco cómo funciona Intraweb, aunque me sorprende lo que comentas. El servidor está hecho con WebBroker, aunque, en cualquier caso, el lenguaje sigue siendo Delphi
__________________
E pur si muove
Responder Con Cita
  #7  
Antiguo 11-08-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Intraweb tiene directamente un componente TIWImage al que se le asigna una imagen y listo. En el caso de webbroker no lo conozco pero supongo que podrias usar el mismo sistema que utiliza internamente el componente TIWImage de intraweb. En este caso intraweb crea un directorio denominado cache, en él, cuando es necesario, guarda un archivo temporal con la imagen que se quiera mostrar, y en el codigo que genera hace una referencia a esta imagen.
Intraweb tiene un proceso que elimina estas imagenes temporales del directorio cache cada cierto tiempo.
El directorio cache no debe tener permisos para el listado de archivos, evitando que los usuarios puedan ver que archivos se encuentran en el.
A cada imagen se le debe dar un nombre aleatorio y de bastantes caracteres, esto es para evitar que alguien pueda acceder a la imagen adivinando su nombre y poniendo en su navegador:
http://www.loquesea.com/cache/nombreimage.jpg

Saludos
Miguel
Responder Con Cita
  #8  
Antiguo 11-08-2004
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Wop!

La verdad es que, como última solución, había pensado en algun sistema parecido a ese. El problema es que eso no me soluciona el upload de los ficheros, y me gustaría no tener que tirar de un frame oculto con un file... la aplicación funciona con xml y sin recargar en nigun momento la pantalla.
__________________
E pur si muove
Responder Con Cita
  #9  
Antiguo 12-08-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
El upload de ficheros es mucho mas chungo en html. Como medida de seguridad, no se puede hacer un upload de un archivo de forma automatica. Si esto se permitiese cualquier web maliciosa podria subir archivos del ordenador cliente sin conocimiento del usuario, lo que seria un gran bug de seguridad. Si consigues que eso funcione en alguna version de explorer, seria debido a que tiene un bug, y seguramente con cualquier actualizacion dejaria de funcionar.

Supongo que se podria programar un activex para el explorer que habria que instalar del lado del cliente para hacer cosas de ese estilo, pero esto limitaria la aplicacion a su funcionamiento solo desde windows y desde el explorer.

Puede que quizas utilizando webdav se pueda hacer algo (este protocolo esta soportado por cualquier servidor web moderno). Con webdav se puede acceder a un directorio para subir y bajar archivos, y esta pensado para ser usado en lugar del protocol ftp que es mucho mas complejo. Webdav permite compartir un directorio en el servidor web, de modo que desde el ordenador cliente se trata como si fuese una carpeta . Desde XP por ejemplo se puede ir a "agregar un sitio de red" indicar la url, y XP crea una referencia a la carpeta remota. Despues en ese carpeta se puede copiar o mover archivos entre el equipo cliente y el remoto como si fuese una carpeta local normal y corriente.
Pero no se si esto se podria controlar desde codigo del lado del cliente con javascript.

Saludos
Miguel
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 09:13:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi