La meilleure façon de télécharger plusieurs fichiers à partir d'un navigateur

je travaille sur une application web. Il y a un endroit où l'utilisateur peut télécharger des fichiers avec le protocole HTTP. Il y a un choix entre le contrôle de téléchargement de fichier HTML classique et un applet Java pour télécharger les fichiers.

le téléchargement de fichier HTML classique n'est pas génial parce que vous ne pouvez sélectionner qu'un seul fichier à la fois, et il est assez difficile d'obtenir une indication de progrès pendant le téléchargement réel (je l'ai finalement obtenu en utilisant un timer rafraîchissant un indicateur de progrès avec des données récupérées à partir de la serveur via un appel AJAX). L'avantage: c'est toujours du travail.

avec L'applet Java, je peux faire plus de choses: sélectionner plusieurs fichiers à la fois (même un dossier), compresser les fichiers, obtenir une barre de progression réelle, faire glisser les fichiers sur l'applet, etc...

Mais il y a quelques inconvénients:

  • c'est un cauchemar pour qu'il fonctionne correctement sur Mac Safari et Firefox sur Mac (Merci Liveconnect)
  • L'UI n'est pas exactement L'UI natif et certaines personnes remarquent que
  • l'applet n'est pas aussi réactif qu'il devrait (peut-être ma faute, mais tout semble ok pour moi)
  • il y a des bugs dans le Java UrlConnection classe avec HTTPS, donc J'utilise le client HTTP commun D'Apache pour faire le téléchargement HTTP réel. C'est un gros paquet qui ralentit le téléchargement du .fichier jar
  • le client HTTP commun D'Apache a parfois de la difficulté à passer par des proxies
  • L'exécution Java est assez gros

j'ai maintenu cette applet Java pendant un certain temps, mais maintenant je suis fatigué de tous les inconvénients, et envisager d'écrire/acheter un tout nouveau composant pour télécharger ces fichiers.

Question

Si vous avez eu les exigences suivantes:

  • télécharger plusieurs fichiers à partir d'un navigateur, via HTTP ou HTTPS
  • compresser les fichiers pour réduire le temps de téléchargement
  • téléchargement devrait travailler sur n'importe quelle plate-forme, avec L'UI natif
  • doit être capable de télécharger des fichiers énormes, jusqu'à 2 Go au moins
  • vous avez carte blanche sur la technologie

quelle technologie ou quels composants utiliseriez-vous?


Edit:

  • Glisser-Déposer des fichiers sur le composant serait un grand plus.
  • il semble qu'il y ait beaucoup de problèmes liés aux bogues avec le lecteur Flash (swfupload problèmes connus). Un support Mac adéquat et un téléchargement via proxies avec authentification sont des options dont je ne peux pas me passer. Cela exclurait probablement toutes les options basées sur Flash: - (.
  • j'écarte toutes les options HTML / Javascript uniquement parce que vous ne pouvez pas sélectionner plus d'un fichier à la fois avec le contrôle HTML classique. Il est difficile de cliquer n-fois le bouton "PARCOURIR" lorsque vous voulez sélectionner plusieurs fichiers dans un dossier.
36
demandé sur Aaron Brager 2009-02-24 18:11:48

10 réponses

j'ai mis en place quelque chose très récemment à Silverlight.

utilise essentiellement HttpWebRequest pour envoyer un morceau de données à un GenericHandler.

Sur le premier post, 4 KO de données est envoyé. Sur le 2e morceau, j'envoie un autre 4K.

quand le 2e morceau est reçu, je calcule le voyage aller-retour qu'il a pris entre le premier et le 2e morceau et donc maintenant le 3ème morceau quand envoyé saura augmenter la vitesse.

en utilisant cette méthode je peux télécharger des fichiers de N'importe quelle taille et je peux reprendre.

Chaque post, j'ai envoyer le long de cette info:

[paramètres] [FILEDATA]

ici, les paramètres contiennent ce qui suit: : [Morceau #] [Filename] [ID de Session]

après chaque morceau est reçu, j'envoie une réponse de retour à mon Silverlight disant à quelle vitesse il a fallu pour qu'il puisse maintenant envoyer un plus grand morceau.

difficile de mettre mon explication sans code mais c'est comme ça que je l'ai fait.

a un moment donné je vais mettre en place un j'ai fait un rapport rapide sur la façon dont j'ai fait ça.

5
répondu Gautam 2009-02-24 23:07:01

Je ne l'ai jamais utilisé avec des fichiers de 2 Go de taille, mais le Yui File Uploader assez bien travaillé sur un projet précédent. Vous pourriez également être intéressé par ce jQuery Plugin.

cela dit, je pense toujours que L'Applet Java est la voie à suivre. Je pense que vous finirez avec moins de portabilité et de problèmes D'interface utilisateur que vous ne le pensez et le Drag / Drop fonctionne très bien. Pour info, Box.net utilise un Applet Java pour leurs téléchargements rapides multi-fichiers.

5
répondu slf 2009-02-24 23:14:31

OK c'est mon point de vue sur ce

j'ai fait quelques tests avec swfupload, et j'ai ma précédente expérience avec Java, et ma conclusion est que quelle que soit la technologie utilisée il n'y a pas de solution parfaite pour faire des téléchargements sur le navigateur: vous rencontrerez toujours des bugs lors du téléchargement de gros fichiers, en passant par des proxies, avec ssl, etc...

mais:

  • un flash uploader (à la swfupload) est vraiment léger, n'a pas besoin d'autorisation de l'utilisateur et a une interface native qui est vraiment cool, me pense
  • un uploader java a besoin d'une autorisation mais vous pouvez faire tout ce que vous voulez avec les fichiers sélectionnés par l'utilisateur (compression aka si nécessaire), et le glisser-déposer fonctionne bien. Soyez prêt pour quelques bogues épiques déboguant cependant.
  • Je n'ai pas eu de changement pour jouer avec Silverlight aussi longtemps que je le voudrais c'est peut-être la vraie réponse, bien que la technologie soit encore assez les jeunes de la sorte ... Je vais éditer ce post si j'ai une chance de jouer un peu avec Silverlight

Merci pour toutes ces réponses !!

4
répondu Sébastien Nussbaumer 2009-03-04 13:56:07

il y a un certain nombre de composants flash libres qui existent avec la capacité de téléchargement de fichiers multiples nice. Ils utilisent ActionScripts FileReference class avec un récepteur PHP (ou n'importe quel récepteur) du côté du serveur. Certains ont récemment rompu avec le lancement du FP10 mais je sais avec certitude que swfupload:)

Espérons que cette aide!

3
répondu adam 2009-02-24 15:17:10

Qu'en ces deux Jupload http://jupload.sourceforge.net/ et jumploader http://jumploader.com/

tous les deux sont des applets java, mais ils sont aussi très faciles à utiliser et à implémenter.

2
répondu Alos 2010-12-30 20:42:31

qu'en est-il Google gears?

1
répondu Thierry 2011-12-31 16:58:46

il existe des contrôles de téléchargement HTTP/HTTPS qui permettent le téléchargement de plusieurs fichiers. Ici est celui de Telerik, que j'ai trouvé solide et fiable. La dernière version semble avoir la plupart sinon toutes vos exigences de fonctionnalité.

0
répondu Dave Swersky 2009-02-24 15:16:35

vous pouvez télécharger plusieurs fichiers avec des formulaires HTTP aussi, comme Dave l'a déjà souligné, mais si vous utilisez quelque chose au-delà de ce que HTTP et Javascript offre, je considérerais fortement Flash. Il y a même des solutions pré-existantes pour cela comme Multiplowupload, et il offre de nombreuses fonctionnalités que vous recherchez. Il est également plus facile d'obtenir des informations sur l'état d'avancement en utilisant un client Flash qu'avec les appels AJAX à partir de Javascript puisque vous avez un peu plus flexibilité.

0
répondu Jay 2009-02-24 15:19:57

vous pouvez consulter le paquet Apache Commons FileUpload. Il vous permet de télécharger plusieurs fichiers, de surveiller la progression du téléchargement, et plus encore. Vous pouvez trouver plus d'informations here:



http://commons.apache.org/fileupload/

http://commons.apache.org/fileupload/using.html



Bonne chance

0
répondu 2009-02-24 17:49:17

la façon la plus facile de télécharger des fichiers en java est GOJFileUpload.bibliothèque jar

voici le tutoriel de la bibliothèque gojfileupload:

GOJFileUpload

Ils donnent deux méthode

  • UploadFile (String filepath,ArrayList imagenames,HttpRequest request)
  • UploadFile (String filepath,ArrayList dataname,ArrayList imagenames, HttpRequest request)

ils vous retourneront HashMap le nom du fichier qui vous avez téléchargé après avoir téléchargé dans votre dossier de destination.

0
répondu GeekOnJava 2014-09-04 10:15:43