So senden Sie eine Datei aus einem servlet, das die "rechten" Weg?
Ich versuche zum senden einer Datei an einen Benutzer von einem http-servlet.
Das servlet läuft einige tests zur Bestimmung (auf Anfrage) und dann sendet der client eine Datei.
Diese Regel funktioniert, aber jetzt drehte ich mich auf meinem TOMCAT-server umleitet auf https und wenn ich versuche, Zugriff auf das servlet die Datei herunterladen und entweder IE6 oder IE8 es schlägt fehl und ich bekomme diese exception:
java.lang.IllegalStateException: Cannot forward after response has been committed
("localhost".log)
und
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
(in der servlet-log)
Den code, funktioniert das senden (Vereinfacht):
private void sendFile(HttpServletResponse response, byte[] file, String clientFileName)
{
ServletOutputStream op = null;
setContentType(response);
response.setHeader("Content-Disposition", "attachment; filename=\"" + clientFileName + "\"");
//send byte array to output buffer.
op = response.getOutputStream();
//Content Length must be set after all processing done.
response.setContentLength((int) file.length);
op.write(file);
}
Ist dies die richtige Art und Weise zu senden, Dateien von einem servlet? Was ist der beste Weg?
Dank!!
UPDATE
Verwendet den code von @BalusC Artikel in diesem link:
http://balusc.blogspot.com/2007/07/fileservlet.html
Dieser machte es Arbeit.
Immer noch nicht funktioniert in IE6-IE8-beim Einsatz von Gmail, da eine Filterung der Bühne gmail fügt die downloads in diesen Browsern.
UPDATE 2
Scheint das problem zu sein, mit Google Mail + Internet Explorer 6-8.
Ich gehe Davon aus, dass gmail ist dabei ein redirect (Das ist eigentlich ziemlich offensichtlich, wenn man sich die url auf die Seite, nachdem Sie auf den link in der mail).
Client-Pull-Technik meine einzige Lösung?
InformationsquelleAutor Ben | 2011-04-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung des Problems ist die "Client-Pull" - Technik.
Durch das hinzufügen einer
Refresh
Wert auf den Kopf-wir machen den browser darum bitten, die Datei.Dies ist die einzige Lösung, die ich kommen könnte bis zu, überwindet die Tatsache, dass die gmail verwenden Sie die Umleitung beim drücken ein link in einer E-Mail.
Im code habe ich diese:
Bedeutung - nach 3 Sekunden bitten Sie den Benutzer für die angegebene url, die wiederum liefern die Datei an den client.
Die
forwardToJSP
- Methode zeigt die "Sie werden weitergeleitet bald, hier ein link, wenn es fehl" - Meldung.InformationsquelleAutor Ben