2010-11-23 18 views
0

J'ai écrit servlet qui écrit réellement des octets d'une image dans la réponse. Je suis capable de télécharger l'image en soumettant le formulaire avec l'action get ou post to servlet. Mais comment puis-je demander cette servlet sans quitter la page? J'ai essayé jQuery.get("http://localhost:8080/mydownloadservlet"). La requête est reçue dans le servlet mais l'image ne se télécharge pas. Il en va de même avec le formulaire submit.Comment puis-je télécharger une image sans quitter la page?

Merci, Amit Patel

Répondre

3

Après avoir travaillé.

Créé iframe caché.

<iframe src="" id="hiddenFrm" style="display:none;" frameborder="0"></iframe> 

et en utilisant jquery téléchargé l'image en réglant src du cadre caché comme suit.

function download(url){ 
    jQuery("#hiddenFrm").attr("src",url); 
} 
0

1) Vous devez définir les en-têtes HTTP correctement:

Content-Disposition: attachment; filename=mypic.jpg 

2) Vous devez accéder à cette page, ne pas faire jQuery.get, mais

<a href="http://localhost:8080/mydownloadservlet">Download pic</a> 

ou en javascript

window.location = 'http://localhost:8080/mydownloadservlet'; 

Si tout se passe comme prévu, vous devriez quitter la page.

3

Ajoutez l'en-tête Content-Disposition: attachment à la réponse de la servlet. De cette façon, le client est forcé d'afficher une boîte de dialogue Enregistrer sous.

response.setHeader("Content-Disposition: attachment; filename=image.gif"); 

Est-ce que ce avant écrire tout octet à la réponse. Vous n'avez pas besoin de JavaScript du côté client pour cela. Juste un lien ou un formulaire pointant vers le servlet. Le client ne quittera pas la page car la disposition de contenu n'est pas définie sur inline.

Vous n'êtes cependant toujours dépendant de la configuration par défaut du client s'il y a une action par défaut associée à la Content-Type de la pièce jointe qui sera exécutée immédiatement au lieu de Enregistrer sous. Dans Firefox par exemple, ceci est configurable par Outils> Options> Applications. Vous ne pouvez pas contrôler cela du côté du serveur, mais vous ne devriez pas vous inquiéter à ce sujet. Le client a décidé de l'avoir ainsi.