Ich obwohl this Frage würde mein Problem lösen, und ich folgte der Simple HTTP Server Beispiel, aber ich bekomme verschiedene Probleme, für die ich keine Lösung finden kann.Decoding Probleme bei der Rückgabe Xlsxwriter Antwort mit Pyramide
Ich möchte eine Excel-Datei in meinem Server generieren und es an den Benutzer mit einer HTTP-Antwort zurückgeben. Ich verwende xlsxwriter, um die Datei und ein Pyramiden-Framework in meinem Server zu erstellen. Ich habe es geschafft, die Datei zu erstellen und es zurückzugeben, aber zuerst Ausgabe ist LibreCalc (Ich teste auf Ubuntu 14) fragt mich, wie ich die Datei importieren möchte. Es spielt keine Rolle, was ich wähle Ich bekomme diese Fehlermeldung
Allgemeine Fehler. Allgemeiner Eingangs-/Ausgangsfehler.
Wenn ich nur die Datei erstellen und speichern, ohne sie als Antwort zurückzugeben, öffnet es sich gut.
Mein Code, um die Datei zu erstellen:
output = StringIO()
workbook = xlsxwriter.Workbook(output)
worksheet = workbook.add_worksheet()
# add the data
workbook.close()
excelcontent = output.getvalue()
response = Response(content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
body=excelcontent)
response.headers.add('Content-Disposition',
"attachment; filename=%s.xlsx" % nice_filename)
response.headers.add('Access-Control-Expose-Headers','Content-Disposition')
response.headers.add("Content-Length", str(len(excelcontent)))
response.headers.add('Last-Modified', last_modified)
response.headers.add("Cache-Control", "no-store")
response.headers.add("Pragma", "no-cache")
return response
Und ich behandeln die Antwort:
$http({
method: 'POST',
url: url,
data: data},
{responseType: 'arraybuffer'}
).success(function (response, status, headers, config) {
var file = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
var fileURL = URL.createObjectURL(file);
var result = document.getElementsByClassName("excel_hidden_download");
var anchor = angular.element(result);
var filename_header = headers('Content-Disposition');
var filename = filename_header.split('filename=')[1];
anchor.attr({
href: fileURL,
target: '_blank',
download: filename
})[0].click();
})
Ich dachte zuerst, es hat etwas mit der Tatsache zu tun haben könnte, dass ich UTF-8 Kodierung in der Python-Datei, aber da ich die Datei anders aufbauen und öffnen kann, glaube ich nicht.
# -*- coding: utf-8 -*-
UTF-8 Enconding in Python-Datei kann nicht verwandt werden. –
Können Sie die Datei direkt von der URL der Browser-Adressleiste herunterladen und sehen, ob es besser funktioniert? –
Wenn nicht, müssen Sie die Datei mit einem Texteditor untersuchen und sehen, was drin ist, wenn es einen Hinweis gibt - es ist XML, also sollte es für Menschen lesbar sein. –