2009-10-31 19 views
7

Ho bisogno di diversi file enormi (diverse date) da Java via FTP/HTTP. C'è una libreria pronta (strumento java/riga di comando) per facilitare il download? Alcuni requisiti sono evidenti:Download manager in Java

  1. Multi-collegamento al file - dovrebbe essere in grado di aprire più connessioni al server per accelerare il download (come FlashGet/GetRight/...)
  2. riprendere un download

Modifica - Preferirei davvero non scrivere una tale libreria ma rubarla (o pagare) per una libreria esistente testata di produzione. rsynch non è rilevante dal momento che ho bisogno di scaricare file da siti HTTP e FTP, non è per il trasferimento di file interno.

risposta

2

Il protocollo HTTP supporta l'avvio di un download parziale a un offset, ma ha un supporto limitato per la convalida della versione parziale locale del file per assicurarsi che non sia privo di junk alla fine (o qualcosa di simile). Se il tuo ambiente lo consente, raccomando rsync con l'opzione --partial. È progettato per supportare questo tipo di funzionalità dalla riga di comando.

Se non è possibile utilizzare rsync, è possibile provare a lavorare con Commons-HTTPClient e utilizzare l'intestazione Range HTTP per scaricare blocchi di dimensioni gestibili.

2

Se sai come creare socket e thread in java non è poi così difficile.

Prima creare una richiesta e leggere le intestazioni per ottenere l'intestazione Content-length. Quindi escogitare una strategia per dividere la richiesta in blocchi di 500K per ogni richiesta. Quindi iniziare a dire 10 richieste utilizzando un thread per ogni richiesta. In ogni richiesta è necessario definire l'intestazione Range.

Riprendere il download consiste nel memorizzare gli intervalli non ancora scaricati. Ti suggerisco di leggere questo HTTP/1.1 Header Fields RFC here se vuoi davvero ottenere una buona conoscenza del protocollo utilizzato.

Tuttavia, se si sta cercando una soluzione semplice, rsync o scp dovrebbe essere sufficiente.

Problemi correlati