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

Schreibe einen Kommentar