Hej, uczę się JSa i Reacta i robię frontend do backendu, który sam napisałem.
Mam endpoint, na którym pobiera mi się plik, ale nie wiem jak to obsłużyć w mojej aplikacji Reactowej.
Po zebraniu danych z forma strzelam axiosem na endpoint i myślałem, że to wystarczy, że headersy z backendu wymuszą na przeglądarce wyskoczenie okienka pobierania, ale nic takiego się nie dzieje.
axios
.post("/generate-timesheet", payload);
Na backendzie mam media-type
= application/octet-stream
i header Content-Disposition: attachment; filename="timesheet.xls"
Szukając rozwiązania, znalazłem jakieś biblioteki wspomagające pobieranie plików - np. https://www.npmjs.com/package/js-file-download
axios
.post("/generate-timesheet", payload)
.then(response => {
FileDownload(response.data, "timesheet.xls");
});
Dzięki temu udało mi się wywołać okienko pobierania, ale nazwę pliku muszę wrzucać ręcznie, a oprócz tego plik pobiera się zepsuty (to pewnie do sprawdzenia i naprawienia, ale nie szedłem dalej, bo wydaje mi się, że powinienem to zrobić bez użycia takiej biblioteki).
Jak powinienem rozwiązać taki problem?
Dodam, że w Postmanie po strzale na endpoint plik pobiera się poprawnie, a nawet jak dla testów przerobiłem metodę na GET
a payload zamockowałem, to po wpisaniu adresu w przeglądarkę plik poprawnie się pobierał.