64 votes

Comment télécharger plusieurs fichiers avec une seule requête HTTP ?

Cas d'utilisation : l'utilisateur clique sur le lien d'une page web - boom ! une charge de fichiers dans son dossier.
J'ai essayé d'emballer les fichiers en utilisant message multipart/mixte mais il semble que cela ne fonctionne que pour Firefox

Voici à quoi ressemble ma réponse :

HTTP/1.0 200 OK
Connection: close
Date: Wed, 24 Jun 2009 23:41:40 GMT
Content-Type: multipart/mixed;boundary=AMZ90RFX875LKMFasdf09DDFF3
Client-Date: Wed, 24 Jun 2009 23:41:40 GMT
Client-Peer: 127.0.0.1:3000
Client-Response-Num: 1
MIME-Version: 1.0
Status: 200

--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="001.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
Content-type: image/jpeg 
Content-transfer-encoding: binary 
Content-disposition: attachment; filename="002.jpg" 

<< here goes binary data >>--AMZ90RFX875LKMFasdf09DDFF3 
--AMZ90RFX875LKMFasdf09DDFF3--

Merci.

P.S. Non, la compression des fichiers n'est pas une option.

55voto

Andrew Moore Points 49765

La compression est la seule option qui donnera un résultat cohérent sur tous les navigateurs. Si ce n'est pas une option parce que vous ne savez pas que les zips peuvent être générés dynamiquement, eh bien, ils le peuvent. Si ce n'est pas une option parce que vous avez une dent contre les fichiers zip, eh bien

MIME/multipart est destiné aux messages électroniques et/ou à la transmission POST au serveur HTTP. Il n'a jamais été prévu qu'il soit reçu et analysé du côté client d'une transaction HTTP. Certains navigateurs l'implémentent, d'autres non.

Comme autre alternative, vous pourriez avoir un script JavaScript ouvrant Windows téléchargeant les fichiers individuels. Ou une applet Java (nécessite des Runtimes Java sur les machines, si c'est une application d'entreprise, cela ne devrait pas poser de problème [puisque le NetAdmin peut la déployer sur les postes de travail]) qui téléchargerait les fichiers dans un répertoire au choix de l'utilisateur.

0 votes

Désolé, votre commentaire est apparu seulement après que j'ai envoyé le mien. M

0 votes

Je suis d'accord, le seul moyen de faire cela est de créer dynamiquement un fichier zip et de l'envoyer à l'utilisateur.

1voto

Einstein Points 2935

Je me souviens avoir fait ça il y a plus de 10 ans à l'époque de Netscape 4. Il utilisait des limites comme ce que vous faites et ne fonctionnait pas du tout avec les autres navigateurs de l'époque.

Bien que cela ne réponde pas à votre question, HTTP 1.1 prend en charge le pipelining des requêtes, de sorte qu'au moins la même connexion TCP peut être réutilisée pour télécharger plusieurs images.

1voto

Roy Rico Points 1547

Vous pouvez utiliser le codage base64 pour intégrer une (très petite) image dans un document HTML, mais du point de vue du navigateur et du serveur, vous n'envoyez techniquement qu'un seul document. C'est peut-être ce que vous avez l'intention de faire ?

Intégration d'images dans le HTML à l'aide de Base64

EDIT : je viens de réaliser que la plupart des méthodes que j'ai trouvées dans ma recherche google ne supportent que firefox, et pas iE.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X