Spring - przygotowywanie pliku do pobrania

Odpowiedz Nowy wątek
2019-08-12 16:09

Rejestracja: 3 lata temu

Ostatnio: 5 godzin temu

Lokalizacja: PL

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

Rejestracja: 2 lata temu

Ostatnio: 8 miesięcy temu

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

Rejestracja: 5 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Warszawa

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

Rejestracja: 12 lat temu

Ostatnio: 14 minut temu

0

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


IT mikromenadżer

Pozostało 580 znaków

2019-08-12 20:16

Rejestracja: 3 lata temu

Ostatnio: 5 godzin temu

Lokalizacja: PL

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
Moderator

Rejestracja: 16 lat temu

Ostatnio: 48 minut temu

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

Rejestracja: 12 lat temu

Ostatnio: 14 minut temu

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.


IT mikromenadżer

Pozostało 580 znaków

2019-08-13 19:40

Rejestracja: 3 lata temu

Ostatnio: 5 godzin temu

Lokalizacja: PL

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

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