Foros del Web » Programando para Internet » Javascript »

gestor de copiado de ficheros

Estas en el tema de gestor de copiado de ficheros en el foro de Javascript en Foros del Web. Buenas a todos. Estoy desarrollando una pequeña aplicación en php para copiar y mover ficheros entre ftp y carpetas locales, cuando se me ha planteado ...
  #1 (permalink)  
Antiguo 11/04/2018, 07:25
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
gestor de copiado de ficheros

Buenas a todos.

Estoy desarrollando una pequeña aplicación en php para copiar y mover ficheros entre ftp y carpetas locales, cuando se me ha planteado cierto problema.

Este script estaba pensado y desarrollado para mover ficheros pequeños, de 40 o 50 megas aprox como mucho pero con el paso del tiempo el tamaño de los ficheros, así como su cantidad han ido creciendo hasta la necesidad de mover a veces 80 o 100 ficheros, a veces sumando incluso más de 10 gb. Obviamente esto no es nada optimizado en php puesto que el timeout, aunque ya lo modifiqué para darle un tiempo de 600 segundos, siempre acaba cumpliéndose y el script se queda a medio ejecutar.

Entonces pensé en hacer algún tipo de "controlador" para que lance las peticiones de mover ficheros usando JS o Jquery (Ajax imagino), de modo que lance la petición de mover el fichero hasta un máximo de 3 ficheros por ejemplo, y que cuando acabe uno de ellos, siga con el cuarto.. y así hasta el final.

Imagino que de este modo solucionaría muchos problemas ya que el timeout ya no sería problemático, la paciencia del usuario tampoco puesto que con JS o Jquery iría pintando en pantalla un progreso fichero a fichero (algo tipo... descargando.... FINALIZADO" y evitaría pulsar F5 o salirse porque el script tarda mucho.

El problema, es que no tengo ni idea de por dónde empezar. El script php está hecho y funciona, no sé si os haría falta el código pero lo dudo, ya que únicamente necesito algo tipo esto:

Código:
  $('#btnMove').click(function() {
    
    //generar array con la lista de ficheros del textarea

    //contar número de ficheros en descarga actual

    //si nficheros en descarga es < 3

      //lanzar descarga del fichero[n+1]

    //si fichero[n] == totalFicheros

      //mensaje de finalización e informe de ficheros totales, tiempo total empleado, etc...
  });
Aparte de estas instrucciones básicas, por el camino hay más cosas que controlaría o que "pintaria" en pantalla para disuadir al usuario inexperto (impaciente) de que refresque la página, o desactivaría el botón de inicio de script... cosas así, pero en eso ya me buscaré la vida más adelante.
  #2 (permalink)  
Antiguo 11/04/2018, 09:16
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: gestor de copiado de ficheros

ya hay librerias para esa tarea del upload con js:

https://github.com/Ifah/AJAX-File-Up...ress-Indicator

http://simpleupload.michaelcbrook.com

y esta que es una de las que mas utilizo y creo es exactamente la que buscas:

http://www.dropzonejs.com
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 11/04/2018, 13:03
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

les voy a echar un ojo a las librerías.
La verdad es que prefería "picar" código, por aquello de aprender y tener un control total sobre lo que hago, pero igualmente revisaré tus librerías, seguramente pueda adaptar y modificar para lo que quiero :)
Gracias xfxstudios
  #4 (permalink)  
Antiguo 12/04/2018, 04:01
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

Pues al final no es exactamente lo que necesito.
Estas 3 opciones que me facilitas necesitan de la intervención del usuario, que es quien coloca los ficheros para subir a un FTP o ubicación determinada, pero no es mi caso.

La necesidad es que esto sea 100% automático. El usuario tiene un textarea, donde va a poner el nombre de 300 ficheros por ejemplo, uno fichero por linea, y luego pulsará el botón de hacer la magia y el script que necesito desarrollar debe ir a la carpeta A (que ya está predefinida), buscar el fichero con el nombre de la primera linea del textarea y si lo encuentra, lo copia en la carpeta B y le aplica otros tratamientos. Y todo ese proceso quiero hacerlo limitando a un maximo de 4-5 ficheros copiándose a la vez, puesto que como decía pueden pesar hasta 2gb, y el total a mover entre los 300 ficheros puede superar las 10gb.

No necesito que tenga una interfaz estupenda, ni nada que sea drag-n-drop, ni que el usuario tenga que seleccionar los ficheros manualmente ni nada similar.

Os pongo el código html que es lo único que el usuario va a ver.
Código:
<form method="post" action="index.php">
	<table>
		<tr>
			<td>Ciclo: <input type="text" name="ciclo"></td>
		</tr>
		<tr>
			<td><h3>Ficheros</h3><textarea name="ficheros" id="txtFicheros" style="height: 300px; width: 800px;"></textarea></td>
		</tr>
		<tr>
			<td colspan="3">
				<input type="submit" name="btn" id="boton" value="Procesar ficheros">
				<div id="alert"></div>
			</td>
		</tr>
	</table>
</form>
Como comentaba, en el textarea van a pegar (viene desde un fichero excel) una lista de ficheros, algo como esto
Código:
file1.txt
file2.txt
file3.txt
...
file300.txt
  #5 (permalink)  
Antiguo 12/04/2018, 10:00
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: gestor de copiado de ficheros

Este es un tema que ya se ha tocado con anterioridad en el foro. Por motivos de seguridad, no se puede acceder al sistema de ficheros local de la forma en la que pretendes hacerlo. Es necesaria la intervención del usuario mediante la selección manual de los archivos.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 13/04/2018, 00:41
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

Cita:
Iniciado por Alexis88 Ver Mensaje
Este es un tema que ya se ha tocado con anterioridad en el foro. Por motivos de seguridad, no se puede acceder al sistema de ficheros local de la forma en la que pretendes hacerlo. Es necesaria la intervención del usuario mediante la selección manual de los archivos.

No. Ya sé que JS no puede acceder al sistema de archivos por seguridad, pero PHP sí puede.

A ver si soy capaz de explicarlo un poco mejor.

Tenemos el fichero index.html, con un formulario como el que puse arriba.
Tenemos el fichero funciones.js, con todo lo necesario en JS (es lo que quiero conseguir)
Tenemos el fichero downloader.php, que es quien recibe desde el JS mediante AJAX el nombre del fichero a mover.

El fichero downloader.php ya está funcionando, si por url le paso los parámetros que quiero, por ejemplo downloader.php?files=file1.txt,file2.txt,file3.txt ... el php ya realiza todo el trabajo que debe, coge los ficheros, los copia en las rutas especificadas, renombra, borra y todo lo necesario.

Lo que yo necesito es un controlador, en JS/Jquery, que cuando el usuario, en index.html pulse el botón de turno, desde el JS/Jquery se capuren los ficheros, se manden uno por uno por AJAX al fichero php, y que se controle que no hay más de 3 o 4 simultáneamente trabajando.
  #7 (permalink)  
Antiguo 13/04/2018, 00:45
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

Creo que ahora lo he explicado mejor que las veces anteriores.

Para mejor entendimiento...
Código:
$('#fileForm').submit(function(e) {  

//recuperamos listado de ficheros etc...
....
//


##################################################

  //lanzamos orden de copia para cada fichero
  var cantidadFicheros = arrFiles.length;
  for (var i = cantidadFicheros; i >= 0; i--) {

    $.ajax({
      type: 'POST',
      url: 'downloader.php',
      data: { fichero:arrFiles[i], ruta:ruta },
      
      success: function(respuesta) {
        $(resultado).append("<p>" + respuesta + "</p>");
      },
      error: function(respuesta) {
        $(resultado).append("<p>" + respuesta + "</p>");
      }
    })

  }
##############################################

})
Hasta aquí tengo hecho, pero esto obviamente si el usuario ha colocado una lista de 100 ficheros en el textarea, intenta lanzar 100 veces el fichero donwloader.php. El código que necesitaría modificar es justo lo que hay entre las líneas de #### para que se ejecute un máximo de 3 o 4 veces al mismo tiempo, y cuando acabe uno de los "hilos" en marcha, comience con el siguiente fichero en espera...
  #8 (permalink)  
Antiguo 13/04/2018, 04:05
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: gestor de copiado de ficheros

una consulta, donde se alojan los supuestos archivos que subes? en el servidor o en el equipo del cliente?, coloca el código php a ver
__________________
[email protected]
HITCEL
  #9 (permalink)  
Antiguo 13/04/2018, 04:21
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

Todos los ficheros se alojan en un servidor dentro de una LAN, pongamos por ejemplo que es la ip 10.10.10.1.
Todos los usuarios conectamos a esa ip donde nos muestra un panel y una de las opciones del panel es esa "mover ficheros del cliente X".

Al pinchar, sale el formulario que puse al principio, el usuario pone la lista de ficheros del cliente X, tal que así

file1.txt
file2.txt
file3.txt
...

y el php que ya está programado y funcionando y lo hace todo correctamente, captura desde un FTP externo el fichero solicitado, lo copia en local en 10.10.10.1, coloca otra copia en otra ip, pongamos 10.10.10.2, y cuando acaba el trabajo, pasa al siguiente fichero.

Ahora todo va en php y claro, es secuencial, hace primero el file1, cuando acaba todas las operaciones del file1, comienza con file2.

por eso la idea es que con ajax se puedan lanzar 4 solicitudes al fichero downloader.php, y cuando una de las 4 haya terminado, que lance una nueva solicitud con el file5... y así sucesivamente hasta fileN que sería el último.
  #10 (permalink)  
Antiguo 13/04/2018, 04:47
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 8 años, 5 meses
Puntos: 86
Respuesta: gestor de copiado de ficheros

Podrías usar setTimeout. Código tomado de
https://developer.mozilla.org/es/doc...rs/setInterval
Código Javascript:
Ver original
  1. (function loop(){
  2.    setTimeout(function() {
  3.       // Your logic here
  4.  
  5.       loop();
  6.   }, delay);
  7. })();
  #11 (permalink)  
Antiguo 13/04/2018, 05:37
Avatar de SirZoX  
Fecha de Ingreso: mayo-2006
Ubicación: Valencia
Mensajes: 124
Antigüedad: 17 años, 11 meses
Puntos: 2
Respuesta: gestor de copiado de ficheros

Lo había pensado, pero no funcionaría correctamente, puesto que un fichero puede pesar 2 gb, mientras que otro 2mb... por tanto seguro que se daría el caso de tener más de 4 ficheros simultáneos, puesto que los ficheros pequeños los acabaría mucho antes que los grandes.
  #12 (permalink)  
Antiguo 13/04/2018, 07:15
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: gestor de copiado de ficheros

Revisa este articulo, podria ser lo que necesitas:

ARTICULO

pues podrías calcular el porcentaje subido y cuando llegue a 100%, inicias el siguiente archivo
__________________
[email protected]
HITCEL

Etiquetas: ajax, ficheros, jquery
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 01:08.