2008-10-31 5 views
15

J'ai besoin d'un moyen facile de permettre aux utilisateurs de télécharger plusieurs fichiers à la fois (c'est-à-dire que je dois autoriser un utilisateur à télécharger un dossier). Je ne souhaite pas mettre le fardeau de zipping sur l'utilisateur.Quelle est la meilleure façon de télécharger un dossier sur un site Web?

Je préférerais éviter Flash ou des variantes si possible. Je suis à la recherche d'une solution javascript/HTML directe si c'est possible. S'il vous plaît noter, cela exclut les réponses à: What is the best client side browser library to upload multiple files over http?.

+0

La meilleure façon: FTP –

+0

Diodeus: Vous devriez afficher cela comme une réponse. – eyelidlessness

Répondre

24

Vous ne pourrez pas le faire uniquement avec HTML et Javascript. Je recommande d'essayer Fancy Upload, un plugin MooTools pour plusieurs téléchargements de fichiers. Il utilise un mélange de JavaScript et Flash, mais se dégrade gracieusement. Il fonctionne avec tous les principaux navigateurs, y compris IE6 et il existe également une version compatible Flash 10 disponible en téléchargement (bien que la démo n'ait pas encore été mise à jour).


Mise à jour (26/11/2012):

plusieurs fichiers ajouts sont possibles avec valums ou blueimp téléchargeurs de fichiers.

Pour le répertoire récursif télécharge, votre meilleure solution utilise Chrome 11's new folder upload API. Il semble également fonctionner sur Firefox si vous utilisez un préfixe fournisseur.

+6

Upvoted pour mettre à jour votre réponse. – Kaganar

+1

Pourquoi est-il impossible de télécharger des fichiers individuels ou des dossiers si l'attribut webkitdirectory est défini? C'est bizarre que ce soit un/ou une chose ... Aussi, puis-je télécharger seulement un répertoire ou puis-je choisir un couple avec l'ensemble d'attributs multiples? –

+0

Ceci est une vieille question et la réponse acceptée est maintenant périmée. Voir ma réponse à cette question pour plusieurs solutions de travail https://stackoverflow.com/questions/42239663/upload-folder-and-all-its-content-in-javascript/45223463#45223463 – CaseyC

3

Si vous évitez flash (et probablement Java?) La JS/solution HTML ne nécessite toujours à votre input, un seul fichier input s, mais essentiellement vous attachez un événement onchange l'ajout d'une nouvelle input au DOM chaque fois un fichier est sélectionné.

+0

Est-il possible d'obtenir une liste de fichiers dans un dossier particulier, et de le faire automatiquement dans le contrôle d'entrée? – torial

+0

J'ai répondu par propre question des commentaires: http://www.codeproject.com/KB/scripting/search_in_files.aspx – torial

+0

Bien que, le problème w/le lien que j'ai trouvé est qu'il nécessite ActiveX. Et à ce stade, je pourrais aussi bien utiliser le flash: -/ – torial

1

Ce n'est pas une solution pure js/html. Comme l'a souligné EndangeredMassa, ce n'est pas possible. En fait, cette idée est une solution IE/Windows uniquement. Je ne le recommande pas, mais ça peut marcher.

Ainsi, tous les dénis de côté ...

Il y a plusieurs années et plusieurs employeurs, nous avons l'habitude de faire des choses de côté client qui instancié FileSystemObject. Il parcourrait chacun des fichiers et les transmettrait au serveur un à la fois. De toute façon, cela signifiait généralement que la boîte à client aurait besoin d'ajouter le site à la liste des sites de confiance et de donner aux sites de confiance un tas d'autorisations que sont désactivés (pour de très bonnes raisons) Stuff comme la capacité d'initialiser et script contrôles ActiveX pas marqué comme sûr.Ce genre de chose

Je sais que ce n'est pas une réponse parfaite, mais il pourrait vous pointer dans la bonne direction.

2

FTP? et si NECs, envelopper dans applet Java, ActiveX ou tout ce que vous voulez.

Sinon, bien que vous ne voulez pas de flash, SWFUpload est assez cool, vous pouvez vouloir le considérer comme une option décente.

1

Here est solution pure JS en utilisant la bibliothèque ExtJS

+1

Cela fonctionne pour plusieurs fichiers, mais pas pour les dossiers. Voir http://stackoverflow.com/a/13486123/486547 – mikermcneil

+0

Que voulez-vous dire par 'uploading folder'? De toute façon il y aurait des fichiers, contenus dans un dossier. – Thevs

+0

Vous pouvez utiliser la technologie basée sur les normes pour télécharger plusieurs fichiers à l'aide d'une zone de téléchargement de fichier (par exemple, http://imgur.com/Cl1RB), mais vous ne pouvez pas choisir un dossier (http://imgur.com/2dZtS) et ont son contenu téléchargé récursivement. Pour ce faire, vous devez utiliser la propriété propriétaire -moz/-webkit. J'espère que cela pourra aider! – mikermcneil

2

fichiers multiples ajouts sont possibles avec valums ou blueimp téléchargeurs de fichiers.

Pour récursive téléchargements, vos options sont plus limitées:

  • Votre meilleure solution utilise Chrome 11's new folder upload API. Il semble également fonctionner sur Firefox si vous utilisez un préfixe fournisseur.

  • Ceci est également possible navigateur croisé avec un Java applet. Cependant, le% des personnes avec un a obtenu installé JRE assez bas ces jours-ci (< 70%)

3

Avec Firefox 42 et ayant mis en œuvre le Bord nouveau directory upload proposal nous allons enfin pouvoir faire le téléchargement de répertoire cross-browser. Les API sont assez désagréables pour que vous souhaitiez extraire mon wrapper, uppie.

Questions connexes