2010-11-23 7 views
0

Ich habe Servlet geschrieben, das tatsächlich Bytes eines Bildes in die Antwort schreibt. Ich kann das Bild herunterladen, indem ich das Formular mit einer Aktion abschicke oder an Servlet sende. Aber wie kann ich dieses Servlet anfordern, ohne die Seite zu verlassen?Wie kann ich ein Bild herunterladen, ohne die Seite zu verlassen?

Ich versuchte jQuery.get("http://localhost:8080/mydownloadservlet"). Die Anfrage wird im Servlet empfangen, aber das Bild wird nicht heruntergeladen. Dasselbe gilt für das Senden von Formularen.

Danke, Amit Patel

Antwort

3

Folgendes funktioniert.

Erstellt versteckten iframe.

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

und mithilfe von jquery das Bild heruntergeladen, indem Sie src des ausgeblendeten Frames wie folgt einstellen.

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

1) Sie müssen richtig die HTTP-Header setzen:

Content-Disposition: attachment; filename=mypic.jpg 

2) Sie müssen zu dieser Seite navigieren, nicht jQuery.get tun, aber

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

oder in Javascript

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

Wenn alles nach Plan läuft, sollten Sie die Seite tatsächlich verlassen.

3

Fügen Sie die Content-Disposition: attachment-Kopfzeile der Servlet-Antwort hinzu. Auf diese Weise muss der Client einen Dialog Speichern unter aufrufen.

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

dies tun vor auf die Antwort jedes Byte zu schreiben. Sie benötigen dafür kein JavaScript auf der Client-Seite. Nur ein Link oder ein Formular, das auf das Servlet verweist. Der Client verlässt die Seite nicht, da die Inhaltsdisposition nicht auf inline festgelegt ist.

Sie sind aber immer noch abhängig von der Standardkonfiguration des Client, ob es eine Standardaktion im Zusammenhang mit den Content-Type der Befestigung, die als sofort statt Speicher ausgeführt wird. In Firefox zum Beispiel ist dies konfigurierbar von Tools> Optionen> Anwendungen. Sie können dies nicht vom Server aus steuern, aber Sie sollten sich darüber keine Gedanken machen. Der Kunde hat sich entschieden, es so zu haben.

Verwandte Themen