So laden Sie die Abrufantwort in der Datei als Antwort
Hier ist der code in actions.js
export function exportRecordToExcel(record) {
return ({fetch}) => ({
type: EXPORT_RECORD_TO_EXCEL,
payload: {
promise: fetch('/records/export', {
credentials: 'same-origin',
method: 'post',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify(data)
}).then(function(response) {
return response;
})
}
});
}
Die zurückgegebene Antwort ist ein .xlsx
- Datei. Ich möchte die Benutzer in der Lage sein, um es zu speichern als Datei, aber nichts passiert. Ich nehme an, die server wieder die richtige Antwort, denn in der Konsole sagt es
Content-Disposition:attachment; filename="report.xlsx"
Was ich bin ich vermisst? Was soll ich tun, in dem reducer?
InformationsquelleAutor der Frage Rafael K. | 2016-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Browser-Technologie derzeit nicht unterstützt das herunterladen einer Datei direkt aus einem Ajax-request. Die Arbeit ist ein hidden Formular aus und senden es hinter den kulissen, den browser zum auslösen der Speichern-dialog.
Bin ich mit einem standard-Flux-Implementierung, also bin ich nicht sicher, was die genaue Redux (Reducer) - code sein sollte, aber der workflow, das ich erstellt habe für einen Datei-download geht so...
FileDownload
. Alle diese Komponente kann ist das Rendern einer versteckten form und dann, innerhalbcomponentDidMount
sofort senden Sie das Formular und nennen esonDownloadComplete
prop.Widget
mit einer download-Schaltfläche/Symbol (viele eigentlich... eine für jedes Element in einer Tabelle).Widget
hat entsprechende Aktion, und speichern Sie die Dateien.Widget
ImporteFileDownload
.Widget
hat zwei Methoden für das herunterladen:handleDownload
undhandleDownloadComplete
.Widget
store hat eine Eigenschaft namensdownloadPath
. Es ist für dienull
standardmäßig. Wenn es Wert istnull
gibt es keine Datei-download in progress " und dieWidget
Komponente nicht dazu, dass dieFileDownload
Komponente.Widget
ruft diehandleDownload
Methode, die Trigger einedownloadFile
Aktion. DiedownloadFile
Aktion NICHT machen eine Ajax-Anforderung. Es löst einDOWNLOAD_FILE
Ereignis, um den Speicher zu senden, zusammen mit derdownloadPath
für die Datei zum download. Der store speichert diedownloadPath
und strahlt ein change-Ereignis.downloadPath
Widget
machen wirdFileDownload
vorbei in die Requisiten-darunterdownloadPath
sowie diehandleDownloadComplete
Methode als der Wert füronDownloadComplete
.FileDownload
gerendert wird und das Formular übermittelt wird, mitmethod="GET"
(POST sollten auch funktionieren) undaction={downloadPath}
die Antwort des Servers wird jetzt auch ausgelöst werden, der browser "Speichern unter" - dialog für target-Datei herunterladen (getestet in IE 9/10, neuesten Firefox und Chrome).onDownloadComplete
/handleDownloadComplete
genannt wird. Dies löst eine weitere Aktion aus, löst einDOWNLOAD_FILE
Veranstaltung. Dieses mal jedochdownloadPath
eingestellt istnull
. Der store speichert diedownloadPath
alsnull
und strahlt ein change-Ereignis.downloadPath
dieFileDownload
Komponente nicht gerendertWidget
und die Welt ist ein glücklicher Ort.Widget.js - teilweise code nur
widgetActions.js - teilweise code nur
widgetStore.js - teilweise code nur
FileDownload.js
- komplette, voll funktionsfähige code bereit für das kopieren und einfügen
- Reagieren 0.14.7 mit Babel 6.x ["es2015", "reagieren", "Stufe-0"]
- form muss
display: none
was die "versteckten"className
ist fürInformationsquelleAutor der Antwort Nate
Können Sie diese beiden libs zum herunterladen von Dateien http://danml.com/download.html https://github.com/eligrey/FileSaver.js/#filesaverjs
Beispiel
InformationsquelleAutor der Antwort Anton Philin