Spring - przygotowywanie pliku do pobrania

0

Hej,

chciałbym zaimplementować w pewnym swoim projekcie możliwość pobrania pliku przez użytkownika. Zasada działania ma być taka, że użytkownik klikając przycisk "Export to file" powinien zainicjować pobieranie pliku. Plik ten z założenia nie jest jakimś zasobem dostępnym na serwerze, tylko normalnym plikiem tekstowym do którego mają być sparsowane dane z bazy (różne dla każdego użytkownika).

Wyczytałem, że w kontrolerze mogę posłużyć się adnotacją @ResponseBody i przekazać plik korzystając ze Springowej klasy FileSystemResource. Jednak jaka jest konwencja przy tworzeniu pliku? Przeglądam dokumentację i widzę kilka konstruktorów klasy File, w tym ten najbardziej mi znany File(String path), lecz ja nie chcę go tworzyć na "serwerze". Chciałbym tylko, aby był Wygenerowany i posłany do pobrania, natomiast nie chcę go przechowywać, bo zawartość pliku zmienia się pod upływem czasu i jest zależna od danych w DB.
Apka nie posiada RESTowego API, lecz HTML. Korzystam też z Thymeleafa.

Z góry dzięki za pomoc i wskazówki! :)

1

Myślę, że jeśli nie chcesz go nigdzie zapisywać to zamiast File lepiej zastosować tutaj ByteArrayOutputStream.

0

Zwróc byte[] i tyle, zakładając oczywiście że ten plik nie jest jest gigantyczny :D

0

Zwróć uwagę, na której puli wątków będziesz to robił. HINT: jak nie zabić serwera?

0
Charles_Ray napisał(a):

Zwróć uwagę, na której puli wątków będziesz to robił. HINT: jak nie zabić serwera?

Jesteś w stanie trochę rozwinąć temat?

0

Użyj Springowego ByteArrayResource. Ma to taki ukryty plus, że Spring auto-magicznie obsłuży ci wtedy headery od content-rage.

0
Belka napisał(a):
Charles_Ray napisał(a):

Zwróć uwagę, na której puli wątków będziesz to robił. HINT: jak nie zabić serwera?

Jesteś w stanie trochę rozwinąć temat?

Generowanie pliku jest operacja „długotrwałą” i powinna zostać obsłużona na dedykowanej puli wątków. Przy dużym ruchu możesz wysycić pulę wątków serwera. W Springu wystarczy zwrócić CompletableFuture/DeferredResult/Observable/Mono, aby pod spodem zadziałał async dispatch.

0
Charles_Ray napisał(a):

Generowanie pliku jest operacja „długotrwałą” i powinna zostać obsłużona na dedykowanej puli wątków. Przy dużym ruchu możesz wysycić pulę wątków serwera. W Springu wystarczy zwrócić CompletableFuture/DeferredResult/Observable/Mono, aby pod spodem zadziałał async dispatch.

Brzmi dla mnie na ten moment trochę skomplikowanie, ale chyba muszę zgłębić temat :) W każdym razie na pewno ta wiedza się przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1