2009-10-31 12 views
7

Necesito varios archivos grandes (varios gigs) de Java a través de FTP/HTTP. ¿Hay una biblioteca lista (java/herramienta de línea de comandos) para facilitar la descarga? Algunos de los requisitos son obvias:Administrador de descargas en Java

  1. multi-conexión de descarga - debe ser capaz de abrir varias conexiones al servidor para acelerar la descarga (como FlashGet/GetRight/...)
  2. reanudar una descarga

Editar - Realmente preferiría no escribir una biblioteca de este tipo, sino robarla (o pagar) para una biblioteca de grado de producción probada existente. rsynch no es relevante ya que necesito descargar archivos de sitios HTTP y FTP, no es para la transferencia interna de archivos.

Respuesta

2

El protocolo HTTP es compatible con iniciar una descarga parcial en un desplazamiento, pero tiene soporte limitado para validar la versión parcial local del archivo para asegurarse de que no tiene basura atada al final (o algo similar). Si su entorno lo permite, recomiendo rsync con la opción --partial. Está diseñado para admitir este tipo de funcionalidad desde la línea de comandos.

Si no puede usar rsync, puede intentar trabajar con Commons-HTTPClient y utilizar el encabezado HTTP de rango para descargar trozos de tamaño manejable.

2

Si sabe cómo crear sockets e hilos en java, no es tan difícil.

Primero crea una solicitud y lee los encabezados para obtener el encabezado Content-length. Luego, diseñe una estrategia para dividir su solicitud en fragmentos de, por ejemplo, 500K cada solicitud. Luego comience a decir 10 solicitudes usando un hilo para cada solicitud. En cada solicitud, debe definir el encabezado Range.

Reanudar su descarga es una cuestión de almacenar los rangos que aún no ha descargado. Le sugiero que lea este HTTP/1.1 encabezado campos RFC here si realmente desea obtener una buena comprensión del protocolo utilizado.

Sin embargo, si está buscando una forma sencilla de salir, rsync o scp deberían ser suficientes.

Cuestiones relacionadas