Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Sincronizar contenido de dos directorios(local-remoto) (https://www.clubdelphi.com/foros/showthread.php?t=48803)

maxvera 04-10-2007 13:35:10

Sincronizar contenido de dos directorios(local-remoto)
 
Tengo que sincronizar una carpeta de imágenes local con otra ubicada en un servidor FTP.

Lo fácil sería hacer un overwrite de todos los ficheros de mi carpeta local y luego borrar todos los ficheros remotos que no se encuentren en mi carpeta local. Para ello, bastaría con usar las Indy 10 (IdFTP) y hacer los Put y Delete oportunos.

El problema está en que el contenido en imágenes puede ascender a unos miles de ellas, lo que supondría un descomunal uso de transferencia en el servidor que, multiplicado por unas pocas sincronizaciones, haría inviable la disponibilidad económica del sistema.

Así que, he pensado que quizás pudiera implementar un procedimiento de comparación de archivos (local-remoto) que me permitiera actualizar únicamente los que no coincidan (nombres de archivos iguales no implican que sean la misma imagen, con lo que habría que actualizarla también).

¿Alguien puede brindarme alguna idea o línea de desarrollo?

Quédoles agradecido. Saludos.

eduarcol 04-10-2007 15:01:12

Yo realize un actualizador que versa mas o menos en lo mismo, apoyado en codigo del amigo seoane, puedes descargarlo aqui

La idea es comparar el MD5 del archivo tanto en la web como en el local, si es distinto lo descarga...

creo que por alli puedes comenzar, cualqueir cosa avisas

Neftali [Germán.Estévez] 04-10-2007 15:49:19

Cita:

Empezado por maxvera (Mensaje 236117)
...he pensado que quizás pudiera implementar un procedimiento de comparación de archivos (local-remoto) que me permitiera actualizar únicamente los que no coincidan (nombres de archivos iguales no implican que sean la misma imagen, con lo que habría que actualizarla también).

Supongo que para la comparación podrías utilizar algun sistema para calcular CRC/Checkum de los ficheros; A igual CRC, nada, si son diferentes sobreescribes.

Si buscas rutinas para el cálculo hay multitud de ellas por internet.

seoane 04-10-2007 16:16:04

Todo esto del md5 esta muy bien, pero el problema es quien crea los hash del lado del servidor. En principio no sabemos, porque maxvera no lo dijo, si ese servidor usa windows o linux, no sabemos si tenemos acceso total a el o solo tenemos una cuenta de ftp, y tampoco sabemos si el servidor de ftp cuenta con el comando md5 o no. :confused:

PD: Para calcular el hash en windows: http://delphi.jmrds.com/?q=node/36

maxvera 04-10-2007 18:57:26

Bien. Creo que el tema de los hashes puede ser la solución (a mi corto entender en la materia).

Me he bajado la unit de Seoane pero, como muy bien apunta, no he dicho en qué servidor y bajo qué condiciones se va a ejecutar la rutina.

- El caso particular se refiere a un servidor FTP Linux.
- Los archivos los crea y sube mi propia aplicación con un TIdFTP de las Indy 10.
- Se supone que tengo acceso total al ftp del dominio (aunque no sé si comprendo lo de acceso total).

Debo entender que las funciones de la unidad Hashes funcionarían bajo Windows pero debería poder extender la operatividad fuera cual fuese la naturaleza del servidor. Eso sí, en cualquier caso, tendría acceso total (?) al servidor.

En cuanto al programa actualizador de eduardcol, un somero vistazo me indica que la dirección de la operación es la contraria de la que busco (me interesa actualizar los archivos del servidor), pero también me ha parecido que para comprobar el md5 es necesario hacer get. Me pregunto si este get implica bajarme el archivo remoto, porque si es así, no soluciono el problema del volumen de transferencia.

Francamente, estoy pez en la materia, y no tengo claro si estoy diciendo tonterías. Agradezco vuestra paciencia.

Saludos.

seoane 04-10-2007 19:18:55

Cita:

Empezado por maxvera (Mensaje 236203)
El caso particular se refiere a un servidor FTP Linux, pero debería poder extender la operatividad fuera cual fuese la naturaleza del servidor.

Pues eso lo veo difícil, para que el sistema tenga alguna utilidad los hash se tendrían que calcular en el servidor. No tendría sentido bajar un archivo para calcular su hash, para comprobar si hay que bajarlo o no :D

Hay algunos servidores de ftp que son capaces de calcular el md5 de un archivo, pero este no es un comando estándar. También se podría crear un programa que se ejecutara de forma periódica y calculase los md5 de todos los ficheros y los guardase en un archivo de texto. Así el cliente solo tendría que comprobar los hash contenidos en el archivo de texto, con el hash de los archivos. Pero este programa dependería del sistema operativo, no seria muy complicado, en linux un simple script bastaría, pero para windows se necesitaría crear un programa.

La tercera opción es la que utiliza eduarcol. El utiliza un servidor web para alojar los archivos, y un script en php para calcular el hash. Este sistema si que es independiente del sistema operativo del servidor, pero además del servidor ftp necesitaríamos uno web.

Cita:

Empezado por maxvera (Mensaje 236203)
¿cuál es la diferencia entre sha1 y md5?

Son algoritmos diferentes, uno devuelve 16 bytes (32 caracteres) y el otro 20 bytes (40 caracteres).

maxvera 04-10-2007 19:46:27

La respuesta de Seoane y la postrera reedición de mi post anterior se han cruzado. Lo aclaro para que haya coherencia de datos :-).

Por lo que me dices, está claro que debería estudiar el código de eduardcol, pues el servidor http tambien está disponible. De hecho utilizo php en el servidor para otras operaciones de archivos, así que parece lo más recomendable.

Voy a ver qué saco en claro (no descarto regresar por aquí en busca de más respuestas).

Saludos y gracias.


La franja horaria es GMT +2. Ahora son las 20:00:44.

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