FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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 |
#2
|
|||
|
|||
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 |
#3
|
||||
|
||||
Cita:
__________________
E pur si muove |
#4
|
||||
|
||||
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 |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
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 |
#7
|
|||
|
|||
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 |
#8
|
||||
|
||||
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 |
#9
|
|||
|
|||
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 |
|
|
|