Spring - przygotowywanie pliku do pobrania

Odpowiedz Nowy wątek
2019-08-12 16:09
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! :)

Pozostało 580 znaków

2019-08-12 17:57
1

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

Pozostało 580 znaków

2019-08-12 19:56
0

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


Nie pomagam przez PM. Pytania zadaje się na forum.
Nieee, to maksymalnie kilkanaście linijek. Bardziej, żeby sobie poćwiczyć implementację takiego feature'a - Belka 2019-08-12 19:57

Pozostało 580 znaków

2019-08-12 20:15
0

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

Pozostało 580 znaków

2019-08-12 20:16
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?

Pozostało 580 znaków

2019-08-13 09:41
0

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


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2019-08-13 10:20
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.

Pozostało 580 znaków

2019-08-13 19:40
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.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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