web-dev-qa-db-fra.com

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! chargement de fichiers assis dans son dossier.
J'ai essayé de compresser des fichiers à l'aide de message en plusieurs parties/mixte , mais cela ne semble fonctionner 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--

Je vous remercie

P.S. Non, la fermeture éclair des fichiers n'est pas une option

44
zakovyrya

Le zip est la seule option qui aura 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 rancune contre les fichiers Zip, eh bien ..

MIME/multipart est destiné aux e-mails et/ou POST transmission au serveur HTTP. Il n'a jamais été conçu pour être reçu et analysé du côté client d'une transaction HTTP. Certains navigateurs le mettent en œuvre, d'autres non.

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

34
Andrew Moore

N'oubliez pas de faire cela il y a> 10 ans dans le netscape 4 jours. Il utilisait des limites comme ce que vous faites et ne fonctionnait pas du tout avec les autres navigateurs à l'époque.

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

1
Einstein

Vous pouvez utiliser l'encodage base64 pour incorporer une (très petite) image dans un document HTML, mais d'un point de vue navigateur/serveur, vous n'envoyez toujours techniquement qu'un seul document. C'est peut-être ce que vous avez l'intention de faire?

Intégrer des images dans HTML en utilisant Base64

EDIT: je viens de réaliser que la plupart des méthodes que j'ai trouvées dans ma recherche Google ne prennent en charge que Firefox, et non iE.

0
Roy Rico