Hallo zusammen,
die Benutzer haben in der View mehrere Möglichkeiten sich ein paar Filter zusammenzuklicken um daraus dann einen PDF-Export zu generieren. Ich habe dann ein Byte-Array, dass ich über den ResponseOutputStream an den Browser schicke.
Mein Problem: Ich bekomme den "speichern unter"-Dialog des Browsers leider immer erst, nachdem das File vollständig vom Browser ins Temp-Verzeichnis runtergeladen wurde. Bei einem 20 MB File und geringem Upload-Speed, dauert das einfach zu lange. Könnt ihr mir sagen, was ich falsch mache?
Anbei der Donwloadcode:
// Nachtrag:
Als contentType kommt ein String der meist wie folgt lautet: "application/pdf"
Ich habe mir schon die W3-Header spezifikationen durchgelesen, konnte mit dem Wissen leider nicht auf meinen Fehler schließen.
Vielen Dank und viele Grüße,
Felix
die Benutzer haben in der View mehrere Möglichkeiten sich ein paar Filter zusammenzuklicken um daraus dann einen PDF-Export zu generieren. Ich habe dann ein Byte-Array, dass ich über den ResponseOutputStream an den Browser schicke.
Mein Problem: Ich bekomme den "speichern unter"-Dialog des Browsers leider immer erst, nachdem das File vollständig vom Browser ins Temp-Verzeichnis runtergeladen wurde. Bei einem 20 MB File und geringem Upload-Speed, dauert das einfach zu lange. Könnt ihr mir sagen, was ich falsch mache?
Anbei der Donwloadcode:
Code:
public static void initiateDownload(String contentType, String filename, byte[] data) throws IOException { FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext = facesContext.getExternalContext(); externalContext.setResponseHeader("Content-Disposition", "attachment; filename=\"" + filename +"\""); externalContext.setResponseContentLength(data.length); externalContext.setResponseContentType(contentType); externalContext.setResponseBufferSize(4096); InputStream in = new ByteArrayInputStream(data); int bufferSize = 4096; byte[] outputByte = new byte[bufferSize]; OutputStream out = externalContext.getResponseOutputStream(); while(in.read(outputByte, 0, bufferSize) != -1) { out.write(outputByte, 0, bufferSize); } externalContext.getResponseOutputStream().flush(); externalContext.getResponseOutputStream().close(); facesContext.responseComplete(); }
Als contentType kommt ein String der meist wie folgt lautet: "application/pdf"
Ich habe mir schon die W3-Header spezifikationen durchgelesen, konnte mit dem Wissen leider nicht auf meinen Fehler schließen.
Vielen Dank und viele Grüße,
Felix
Comment