|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre expérimenté
![]() Olivier Ingénieur développement logiciels Inscription : janvier 2004 Messages : 604 ![]() |
Bonjour tout le monde,
J'ai une API Java qui me renvoie un StreamResponse quand je lui demande de télécharger une archive. J'arrive bien à récupérer l'objet JSON ou XHR qui revient avec ma requête AJAX de récupération de cette archive, mais je n'arrive pas à en récupérer le flux pour lancer le téléchargement. Est-ce que quelqu'un saurait m'aider sur le sujet et m'indiquer comment lancer ce téléchargement ? L'idée sous-jacente liée à l'utilisation d'AJAX est que lorsque je demande la récupération de l'archive, je lui passe un ensemble de paramètres qui déterminent comment est construite l'archive. Cette construction prend évidemment du temps et j'affiche en JS sur l'action AJAX un sablier et un message invitant à patienter. Quand je reçois mon retour AJAX, avec donc mon StreamResponse, j'aimerais lancer son téléchargement. Je n'ai évidement pas accès, avec cette API (privée) à l'adresse du fichier qui a été construit et qui va être téléchargé. Code JavaScript dans lequel je souhaiterais lancer le téléchargement du Stream --ligne en gras Citation:
Citation:
Code :
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter ! |
||||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() Duke Jikel Inscription : mai 2010 Messages : 340 ![]() |
Si tu veux TELECHARGER un contenu/fichier/stream, et donc ouvrir la boite de téléchargement du navigateur de l'utilisateur, ce n'est pas par ajax qu'il faut passer mais pas un window.location.href = "url de ton fichier en ajax".
et coté serveur il faut changer le mime-type (content-type) pour être sur que l'utilisateur va télécharger le contenu. Dans la plupart des cas c'est : application/force-download, si ça ne passe pas, dans l'ancien temps (2003/2004, j'utilisais : application/octet-stream en ASP 2 Mais sinon une recherche sur google avec les mots "forcer" et "telechargement" t'aurais permis de trouver une réponse à ton problème |
|
|
00
|
|
|
#3 | |
|
Membre expérimenté
![]() Olivier Ingénieur développement logiciels Inscription : janvier 2004 Messages : 604 ![]() |
Salut Duke.
Citation:
Non, le vrai problème c'est de gérer ça en AJAX... Le workflow de mon application est le suivant :
Si je veux l'étape 6, je passe par AJAX, et je peux intercepter l'appel au serveur (fonction onCreate) et le retour du serveur (fonction onComplete). Dans ma fonction onComplete, je récupère bien le retour de mon serveur. Donc si je renvoie un 'Content-Type: text/html' je peux l'afficher par exemple dans un div de ma page, ou bien dans une popup. Aucun soucis là dessus. Par contre, si je renvoie justement un contenu à télécharger, je n'arrive pas à lancer le téléchargement. Il suffirait que je puisse ouvrir tout le retour du serveur (header inclus) dans un popup (que je ferme par exemple aussitôt après). Malheureusement je n'arrive pas à récupérer le header qui m'est renvoyé, ni forcer un header particuliers sur un popup (window.open). Aujourd'hui, j'ai une solution de contournement ou je renvoie un lien vers mon Stream à télécharger et j'affiche dynamiquement ce lien une fois la création de l'archive terminée. Mais j'aurais préféré automatiser un peu plus la chose et éviter que mon utilisateur est besoin de cliquer 2 fois (une pour créer l'archive, une seconde pour la télécharger).
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter ! |
|
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() ![]() Duke Jikel Inscription : mai 2010 Messages : 340 ![]() |
quand ton stream te retourne ce lien, au lieu d'afficher ce lien, tu vérifies que c'est un "fichier à télécharger", et au lieu de faire :
"J'affiche le contenu dans le innerHTML de mon joli div" tu fais un : window.location.href = monlien récupéré et là un téléchargement se lancera automatique. C'est ce que je te disais depuis le début, soit tu t'attends à recevoir un "fichier à télécharger", soit un contenu à afficher. Mais si ton application te retourne l'une des deux réponses, tu traites en fonction. Qu'est ce que tu ne comprends pas dans mon explication ? |
|
|
00
|
|
|
#5 | |
|
Membre expérimenté
![]() Olivier Ingénieur développement logiciels Inscription : janvier 2004 Messages : 604 ![]() |
Euh... à dire vrai c'est la partie redirection qui m'échappe.
Aujourd'hui, quand j'ai mon retour AJAX, je me contente d'afficher un lien (au lieu de chercher à récupérer quelque chose dans mon innerHTML...). Ce lien c'est celui en gras ci-dessous. Et ce lien il me soumet le formulaire qui renvoie le StreamResponse : Citation:
En tout cas, merci pour l'intérêt que tu me portes !
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter ! |
|
|
|
00
|
|
|
#6 |
|
Membre expérimenté
![]() Olivier Ingénieur développement logiciels Inscription : janvier 2004 Messages : 604 ![]() |
Je clos le sujet vu que mon contournement en affichant un lien pour le téléchargement fonctionne.
Manque de temps, je peux pas consommer plus sur une solution plus automatisé, à mon grand regret. Concrètement, l'ouverture et la soumission de mon formulaire (ce que fait mon lien quand il est cliqué...) en JavaScript dans une pop-up est problématique vu que derrière j'ai Tapestry. J'arrive pas (manque de maîtrise sur le sujet) à générer un click sur ce lien... et que ça fonctionne. Merci encore en tout cas. Pouce
__________________
Si , et la ont échoué mais pas nous, pensez à dire et cliquez sur . Merci !Ici, c'est un forum, pas une foire. Il y a de respectables règles... à respecter ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com