2009-10-31 4 views
7

J'ai besoin de plusieurs gros fichiers (plusieurs concerts) de Java via FTP/HTTP. Y at-il une bibliothèque prête (java/outil de ligne de commande) pour faciliter le téléchargement? Certaines exigences évidentes sont:Gestionnaire de téléchargement en Java

  1. télécharger Multi-connexion - devrait être en mesure d'ouvrir plusieurs connexions au serveur pour accélérer le téléchargement (comme FlashGet/GetRight/...)
  2. CV téléchargement

Éditer - Je préférerais vraiment ne pas écrire une telle bibliothèque mais la voler (ou la payer) pour une bibliothèque de production déjà testée. rsynch n'est pas pertinent car j'ai besoin de télécharger des fichiers à partir de sites HTTP et FTP, ce n'est pas pour le transfert de fichiers interne.

Répondre

2

Le protocole HTTP prend en charge le démarrage d'un téléchargement partiel à un décalage, mais il a un support limité pour valider la version partielle locale du fichier pour s'assurer qu'il n'a pas d'accrochage à la fin (ou quelque chose de similaire). Si votre environnement le permet, je recommande rsync avec l'option --partial. Son conçu pour soutenir ce genre de fonctionnalité de la ligne de commande.

Si vous ne pouvez pas utiliser rsync, vous pouvez essayer d'utiliser Commons-HTTPClient et utiliser l'en-tête HTTP Range pour télécharger des blocs de taille gérable.

2

Si vous savez créer des sockets et des threads en Java, ce n'est pas si compliqué.

Créez d'abord une demande et lisez les en-têtes pour obtenir l'en-tête Content-length. Ensuite, concevoir une stratégie pour diviser votre demande en morceaux de par exemple 500K chaque demande. Puis commencez par dire 10 demandes en utilisant un fil pour chaque requête. Dans chaque requête, vous devez définir l'en-tête Range.

La reprise de votre téléchargement consiste à stocker les plages que vous n'avez pas encore téléchargées. Je vous suggère de lire ce champs d'en-tête HTTP/1.1 RFC here si vous voulez vraiment avoir une bonne compréhension du protocole utilisé. Cependant, si vous cherchez un moyen facile, rsync ou scp devrait suffire.

Questions connexes