Hallo zusammen,
ich biete einen dynamischen Dateidownload an, der sich die gewünschten Daten aus einer Datenbank liest und dann den Benutzer zur Verfügung stellt.
Aus Performancegründen ist eine vorherige Abfrage auf die Datenbank jedoch nicht möglich, so dass ich leere Datensätze zurückbekomme, in diesem Fall schreibe ich nichts in den Ausgabestream, sondern lese den nächsten Satz.
Der Code funktioniert auch einwandfrei, nur das Problem ist, wenn das ByteArray (getModel().export.getCsvFileByteArray()) leer ist, erscheint der Downloaddialog noch nicht, erst wenn die ersten Daten rausgeschrieben werden. Da dies manchmal erst beim 100. Satz ist, dauert es teilweise sehr lange, bis diese Box erscheint und der Anwender klickt erneut...
Ich habe schon probiert, zu Beginn Leerzeichen rauszuschreiben, aber dies funktioniert leider nicht (Box kommt trotzdem nicht). Andere Zeichen wären keine Lösung, denn sonst besitzt die CSV-Datei, die rauskommt, überflüssige Zeichen.
Kennt jemand von euch eine Lösung, um die Downloadbox direkt anzuzeigen?
Vielen Dank
Sebastian
ich biete einen dynamischen Dateidownload an, der sich die gewünschten Daten aus einer Datenbank liest und dann den Benutzer zur Verfügung stellt.
Aus Performancegründen ist eine vorherige Abfrage auf die Datenbank jedoch nicht möglich, so dass ich leere Datensätze zurückbekomme, in diesem Fall schreibe ich nichts in den Ausgabestream, sondern lese den nächsten Satz.
Code:
// Dateidownload
this.rc.res.setContentType("application/csv");
this.rc.res.setHeader("Content-Disposition",
"attachment; filename=\"" + filenamecsv);
ServletOutputStream out = this.rc.res.getOutputStream();
// einmalig wurde der Inhalt vorgelesen
out.write(getModel().export.getCsvFileByteArray());
out.flush();
// solange noch weitere Sätze vorhanden sind
while (getModel().export.getAbrechnungen()
.size() != 0) {
out.write(getModel().export.getCsvFileByteArray());
out.flush();
}
}
out.close();
Der Code funktioniert auch einwandfrei, nur das Problem ist, wenn das ByteArray (getModel().export.getCsvFileByteArray()) leer ist, erscheint der Downloaddialog noch nicht, erst wenn die ersten Daten rausgeschrieben werden. Da dies manchmal erst beim 100. Satz ist, dauert es teilweise sehr lange, bis diese Box erscheint und der Anwender klickt erneut...
Ich habe schon probiert, zu Beginn Leerzeichen rauszuschreiben, aber dies funktioniert leider nicht (Box kommt trotzdem nicht). Andere Zeichen wären keine Lösung, denn sonst besitzt die CSV-Datei, die rauskommt, überflüssige Zeichen.
Kennt jemand von euch eine Lösung, um die Downloadbox direkt anzuzeigen?
Vielen Dank
Sebastian