So erstellen und laden Sie eine Excel-Datei mithilfe einer Ajax-Anfrage herunter

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: So erstellen und laden Sie eine Excel-Datei mithilfe einer Ajax-Anfrage herunter

by Guest » 12 Jan 2025, 12:02

Ich möchte eine Excel-Datei erstellen, wenn der Benutzer auf meiner Webseite auf eine Formularschaltfläche geklickt hat. Meine erste Lösung funktioniert gut. Der Benutzer hat die Schaltfläche gedrückt, der serverseitige Java-Code erstellt die Datei und nachdem der Java-Code ausgeführt wurde, öffnet der Webbrowser einen Dialog, der den Benutzer fragt, ob er die Excel-Datei anzeigen oder speichern möchte.

Aber ich bekomme einige neue Anforderungen von meinem Kunden. Wenn der Benutzer die Formularschaltfläche gedrückt hat, muss ein animiertes GIF-Bild angezeigt werden, während der serverseitige Java-Code ausgeführt wurde, und das animierte GIF muss sofort ausgeblendet werden, wenn der serverseitige Java-Code beendet wurde.

Dies ist der Struts2-Submit-Button, der die HTTP-Anfrage startet, wenn der Button gedrückt wurde:
Dies ist der Client-Code, der die HTTP-Anfrage erstellt und an meine Struts2-Aktionsklasse sendet:

Code: Select all

function myJsFunction(){
$.ajax({
type: "POST",
dataType: 'binary',
url: "myActionClass.action",
data: {//some necessary input values},
success: function(data){
console.log(data);
// js code to disappeared the animated gif image
}
});
}
Dies ist der Java-Code, der den Binärcode erstellt:

Code: Select all

private void returnExcelFileAsStream(final String filename) throws IOException {
final InputStream is = new FileInputStream(filename);
OutputStream os = null;
try {
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "maxage=3600");
response.setHeader("Pragma", "public");
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
os = response.getOutputStream();
int len;
byte buf[] = new byte[1024];
while ((len = is.read(buf)) > 0) {
os.write(buf, 0, len);
}
is.close();
os.close();
}
catch(Exception e){
// some exeception handling
}
}
Dies ist die Struts2-Ausführungsmethode, die die Methode returnExcelFileAsStream aufruft.

Code: Select all

public String execute(){

// some Java code
returnExcelFileAsStream("MyExcelFile.xlsx")

return null;
}
Dies ist meine struts.xml-Datei:

Code: Select all

/WEB-INF/base/jsp/myJspPage.jsp

Jetzt besteht das Problem, dass der Webbrowser keinen Benutzerdialog öffnet, der den Benutzer auffordert, die Datei anzuzeigen oder zu speichern. Bei Firebug sehe ich einige kryptische Zeichen in der HTTP-Antwort. Wie kann ich dieses Problem lösen?

Top