Excel-Datei (.xlsx) aus der server-Antwort in ajax

Ich habe ein problem mit dem Ausstieg excel-Datei und das öffnen des download-Fensters im browser nach dem aufstehen eine Antwort (Erfolg ajax-Methode) mit dieser Datei. Ich habe entsprechende Content-Type and Content-Disposition headers, versuchte ich mit Blob in js und ich konnte nicht das erreichen, was ich will - einfach die Datei herunterladen.
Ich vollbrachte einige Versionen meiner ajax, einer von Ihnen ist unten. Ich entwickelte ajax, kehrt excel-Datei, die konnte ich nicht richtig öffnen, weil es beschädigt ist (trotz .xlsx-Erweiterung).

Vielleicht ist das problem mit ungeeigneten Datentyp verwendet, die in einem Blob-Konstruktor?

Ich habe versucht, mit "xhr.Antwort" anstelle von "Daten" aus Erfolg, Methode, Argumente, aber es funktioniert nicht zu. Ich überprüfte Antwort-Headern in den Developer Tools in Chrome und Sie sind richtig eingestellt.
Das wichtigste - alle excel-Arbeitsmappen erstellt, die auf der server-Seite ist korrekt, denn es funktionierte in der vorherigen version, wenn Daten gesendet wurde, in der URL, nicht in ajax post.

Controller-Methode in der Java - /Spring-server-Seite unter:

response.reset();
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment;filename=\"" + className + " " +  title + ".xlsx\"");
    try (ServletOutputStream output = response.getOutputStream()){
        workbook.write(output);
        output.flush();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }

Meine Ajax-Datei downloaden und öffnen des download-Fensters:

$.ajax({
    url: myUrl,
    type: 'POST',
    data: myData,
    success: function(data, status, xhr) {
        var contentType = 'application/vnd.ms-excel';

        var filename = "";
        var disposition = xhr.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
            var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
            var matches = filenameRegex.exec(disposition);
            if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
        }
        console.log("FILENAME: " + filename);

        try {
            var blob = new Blob([data], { type: contentType });

            var downloadUrl = URL.createObjectURL(blob);
            var a = document.createElement("a");
            a.href = downloadUrl;
            a.download = filename;
            document.body.appendChild(a);
            a.click();

        } catch (exc) {
            console.log("Save Blob method failed with the following exception.");
            console.log(exc);
        }

InformationsquelleAutor KamilosD | 2017-11-06

Schreibe einen Kommentar