6
votes

Téléchargez plusieurs fichiers dans une requête HTTP

Comment est-il possible de télécharger plusieurs fichiers dans une demande HTTP? Ce que je veux dire, c'est comme lorsque vous avez plusieurs pièces jointes et que vous sélectionnez ce que vous souhaitez télécharger, puis appuyez sur Télécharger afin qu'ils seront téléchargés de manière automatique et vous n'avez pas à cliquer sur chacun manuellement.

J'utilise php comme srcipting serveride.


0 commentaires

8 Réponses :


4
votes

Je pense que ce n'est pas possible car chaque demande HTTP n'a qu'un seul URI.


1 commentaires

Correct. Les demandes HTTP ont un début et une fin spécifiques. Vous pouvez probablement abuser du protocole en écrivant un client spécial et en servant les fichiers comme un fichier (beaucoup comme un fichier goudron ou juste un mime multipart ), mais nous ne voulions pas Je parle d'une solution HTTP pure qui fonctionne plus dans tous les navigateurs.



8
votes

C'est pratiquement non utilisable en raison d'un support de navigateur médiocre. Vous pouvez les emballer dans un goudron ou un fichier zip au côté serveur et servir le fichier d'archive cependant.


2 commentaires

Il est pratiquement possible (Firefox le prouve). Mais il n'est pratiquement pas utile car ce n'est que Firefox qui le soutient.


Plus de clarification :) BTW, car les développeurs de navigateurs se penchent contre plus de choses publiques telles que les éléments HTML5 et CSS3, je doute que nous verrions une adoption généralisée de ce temps à tout moment. C'est bien de voir que FF l'a impliqué cependant.



2
votes

Vous pouvez sélectionner le fichier avec PHP, ServerSide et demander le fichier ou le renvoyer dans votre script en définissant les en-têtes appropriés, voir zipararchive classe

ou vous créez un client spécial capable d'analyser votre format de message auto-spécifié (une application flash, d'un plug-in) - mais si votre client est simplement votre navigateur, vous obtiendrez une réponse avec une longueur de contenu fixe de la serveur.


0 commentaires

12
votes

It est possible d'envoyer un réponse multipart dans http :

En général, HTTP traite un message multipartite non différemment de tout autre type de support: strictement comme charge utile. [...] Un agent utilisateur HTTP devrait suivre le même comportement ou un comportement similaire qu'un agent utilisateur MIME serait à la réception d'un type multipart.

[...] Si une application reçoit un sous-type multipartit non reconnu, l'application doit le traiter comme équivalente à "multipart / mixte".

Mais puisque Firefox est le seul navigateur que je connais pour supporter de telles réponses multipartières (à part multipart / byterange ), vous devez utiliser un format de fichier d'archive à cet effet.


0 commentaires

0
votes

Dunno sur une requête HTTP, mais si vous le souhaitez tous à la fois, vous pouvez les boucler lors de la modification de l'en-tête ('' Emplacement: ') pour chacun d'entre eux lors de la redirection du script de téléchargement immédiat . Cependant, ce serait redondant et moche; Je pense que le meilleur moyen serait de les adapter à tous, il y a des instructions sur la manière de le faire dans le Documentation PHP . < / p>


1 commentaires

Ce n'est pas possible de cette façon, car si vous envoyez l'emplacement, le téléchargement de l'en-tête de localisation ne sera pas démarru et que le navigateur sera redirigé, sinon si le fichier sera téléchargé, aucune redirection ne sera effectuée.



-2
votes

Peut-être que vous pouvez utiliser JS pour ouvrir plusieurs popups chacun chargement d'une URL de téléchargement. J'espère que c'est le seul moyen ..


0 commentaires

0
votes

J'utilise plusieurs iframes invisibles pour déclencher plusieurs téléchargements à la fois. Il y aura plus d'une demande HTTP, mais l'effet sera ce que vous avez décrit.

<iframe style="display: none;" src="file1.zip"></iframe>
<iframe style="display: none;" src="file2.zip"></iframe>
<iframe style="display: none;" src="file3.zip"></iframe>


0 commentaires

0
votes

Un moyen facile est de coder les fichiers de base64 et d'envoyer un JSON. Cependant, cela ferait la réponse quelque chose comme 4/3 la taille, alors n'utilisez donc pas cela sur des fichiers volumineux.


0 commentaires