2009-05-04 4 views
0

Wir laufen Tomcat, und wir erzeugen PDF-Dateien im laufenden Betrieb. Ich habe nicht die Dateigröße vor der Hand, so dass ich nicht direkt auf eine Datei auf dem Server verlinken kann. Also sende ich direkt die Ausgabe.Jsp Download Dateigröße

response.setContentType("application/force-download"); 
OutputStream o = response.getOutputStream(); 

Und dann ich direkt an diesen OutputStream ausgeben.

Das einzige Problem ist, dass der Empfänger nicht die Dateigröße bekommt, so dass sie nicht wissen, wie lange der Download dauern wird. Gibt es eine Möglichkeit, der Antwort mitzuteilen, wie groß die Datei ist?

BEARBEITEN Ich kenne die Dateigröße, ich kann dem STREAM nicht sagen, wie groß die Datei ist.

Antwort

5

sollte das Antwortobjekt eine setContentLength Methode haben:

// Assumes response is a ServletResponse 
response.setContentLength(sizeHere); 
+0

Dies ist die richtige Antwort. Der OP hat die Frage aktualisiert und gesagt, er kenne die Dateigröße, weiß aber nicht, wie er das in der Antwort angeben soll. –

1

Serialisieren Sie den PDF-Byte-Stream in eine Datei oder in ein Byte-Array, berechnen Sie seine Größe, legen Sie die Größe fest und schreiben Sie sie in den Ausgabestream.

+0

ich als Datei, um die pdf tun haben. Ich muss dem STREAM sagen, wie groß die Datei ist. – Milhous

+0

Das ist besonders bei großen PDF-Dateien sehr ineffizient, und wenn die Benutzer über die verbleibende Downloadzeit informiert werden, besteht die Möglichkeit, dass die Datei groß ist. –

+0

Nun, es ist nur ein PDF, das von 2-56MB sein kann. – Milhous

0

Ich glaube, Sie sind ansering die Frage, die Sie selbst: Zitat: Ich habe nicht die Dateigröße vor der Hand, so dass ich direkt die Ausgabe senden.

Wenn Sie nicht über die Größe, die Sie es können nicht senden ....

+0

die Größe ist nicht statisch, aber ich weiß es, wenn ich die Seite sende. – Milhous

0

Warum nicht die PDF-Datei erzeugen, um die temporären Datei-System oder RAM-Basis-Dateisystem oder Speicher-Map-Datei on the fly . dann können Sie die Dateigröße erhalten.

response.setContentType ("application/force-download"); response.setContentLength (GrößeHier); Ausgabestream o = response.getOutputStream();

+0

Ich habe die Dateigröße. Siehe meine Bearbeitung. – Milhous