Foros del Web » Programación para mayores de 30 ;) » Programación General »

Controlar descarga finalizada

Estas en el tema de Controlar descarga finalizada en el foro de Programación General en Foros del Web. Tengo una web y permito a los usuarios de mi página descargarse determinados archivos, entonces necesito saber cuando la descarga del archivo se ha completado ...
  #1 (permalink)  
Antiguo 07/05/2007, 09:57
 
Fecha de Ingreso: marzo-2007
Mensajes: 113
Antigüedad: 17 años, 2 meses
Puntos: 0
Controlar descarga finalizada

Tengo una web y permito a los usuarios de mi página descargarse determinados archivos, entonces necesito saber cuando la descarga del archivo se ha completado con exito y cuando se ha cancelado o ha fallado.

Necesito diferenciar estos dos casos ya que se trata de un archivo compartido en el servidor por varios usuarios y cuando un usuario se lo descarga es para modificarlo/actualizarlo y tengo que informar al resto de usuarios de que otro usuario lo tiene en posesion en ese momento actualizandolo.

Espero vuestra ayuda. Muchas gracias
  #2 (permalink)  
Antiguo 07/05/2007, 15:01
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: Controlar descarga finalizada

Quizás implantando un sistema como el que utiliza Dreamweaver para permitir trabajo colaborativo por ftp, te podría valer.

Consiste en grabar un fichero de control que indique qué persona lo está editando en ese momento. Cuando el usuario termina de editarlo, el fichero de control se borra. Los demás, al intentar acceder, primero observan si existe ese fichero de control y saber quien lo edita. Si no hay nadie, el que primero cree el fichero de control, podrá editarlo.

Mirando los logs del servidor ftp no tendrás mucha información de lo que está ocurriendo en el momento, porque sólo queda registrado el suceso después de que haya ocurrido (alguien lee el fichero, alguien lo ha dejado escrito uno nuevo). Se podría llevar más control si el servidor de ftp puede dejar un registro más detallado, como por ejemplo el vsftpd, que tiene un log distinto del normal, donde deja detallado todos los comandos que recibe y ejecuta.

La opción más sencilla sería:
* Un script que se ejecutase cada poco tiempo, mirase el registro de actividad del fichero.
* Si la última operación fue de lectura, se crea un fichero bandera indicando qué usuario lo ha leído por última vez.
* En caso de que la última operación sea de escritura y además sea del último usuario que lo había leído, entonces borramos el fichero bandera.
* En caso contrario, de que no sea el mismo usuario, podría ocurrir de un fallo de sincronización, por lo que hay que avisar a los usuarios, por otro medio
* Se supone que los usuarios NO van a leer el fichero si el fichero bandera existe.

Una forma de evitar que los usuarios accedan al fichero y lo modifiquen es jugando con los permisos y el usuario al que pertenece el fichero. Así:

* El último usuario que lea el fichero, se hace con su propiedad. El script modifica el propietario del fichero para que sea ese usuario. Y los permisos de lectura y grabación sólo para él (chmod 0600 en unix).
* Los demás usuarios no podrán leerlo ni modificarlo.
* Cuando el usuario lo escriba de nuevo, el script le da permisos de lectura a todo el mundo (chmod 0644), por lo que los demás podrán ahora sí, leerlo. Además, seguirá reflejándose quien fue la última persona que lo modificó.

Esta solución tiene un par de problemas: si se rompe la conexión o el usuario que lo lee/bloquea no lo escribe de nuevo, entonces el fichero queda bloqueado hasta que ese mismo usuario vuelve a entrar a modificarlo. Mientras tanto, los demás no pueden hacer nada. Y el otro es que el usuario que ejecuta el script debe tener suficientes permisos como para hacer todo esto.0

Hay otras opciones más cómodas...

Si es un documento de texto o una hoja de cálculo, es recomendable usar el Google Docs, además de ser gratuito. Si se quiere para un uso más serio, se le puede comprar una licencia a Google. Nosotros lo estamos usando y es perfecto para que un equipo de personas trabaje sobre un mismo documento.

Creo que hay algún wiki o programa de groupware que también permite estas cosas.

Por último, hay editores que permiten trabajar con varias personas al mismo tiempo:
* Ace
* Gobby
* otros
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:57.