• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pobieranie wszystkich obrazów z folderu publicznego po zbudowaniu aplikacji [React + Vite]

Object Storage Arubacloud
0 głosów
166 wizyt
pytanie zadane 19 lipca 2023 w JavaScript przez Oskar Szkurłat Bywalec (2,780 p.)

Chciałbym zrobić galerię zdjęć na stronie, ale nie chcę przechowywać plików na zewnętrznym serwerze, więc moim pomysłem jest przechowywanie wszystkich obrazów w folderze publicznym projektu. Głównym założeniem jest możliwość dodawania kolejnych plików do listy po zbudowaniu aplikacji. Korzystam z frameworka React+Vite.

Pobrałem wszystkie pliki z folderu `public/gallery`. `import.meta.glob` zwraca funkcje, które zwracają Promise. Dlatego wywołałem każdą funkcję i z promisów uzyskałem adresy URL plików.

interface ImportImageData {
  default: string
}

type ImportImageGlob = () => Promise<ImportImageData>
useEffect(() => {
    const fetchGallery = (): void => {
      const images: ImportImageGlob[] = Object.values(
        import.meta.glob('/public/gallery/*')
      ) as ImportImageGlob[]

      _.forEach(images, (fetchImg: ImportImageGlob): void => {
        fetchImg()
          .then((data: ImportImageData): void => {
            setDataSource((prev: string[]): string[] => {
              return _.uniq([...prev, data.default])
            })
          })
          .catch((): void => {})
      })
    }

    fetchGallery()
  }, [setDataSource])

W wersji developerskiej aplikacji wszystko działa idealnie. Jednak w wersji produkcyjnej lista plików nie jest odświeżana, tzn. kiedy dodaję nowy obraz, wyświetlane są tylko poprzednie pliki.

Jak mogę rozwiązać ten problem? Czy jest jakieś inne rozwiązanie na ten problem?

Z góry dziękuję

1 odpowiedź

+3 głosów
odpowiedź 19 lipca 2023 przez jankustosz1 Nałogowiec (35,880 p.)
wybrane 20 lipca 2023 przez Oskar Szkurłat
 
Najlepsza
Cały kod js jest wykonywany po stronie przeglądarki klienta. Zastanów się skąd miałby on wiedzieć, że gdzieś na serwerze dodałeś sobie jakiś plik? Do tego pewnie hostujesz stronę statycznie na jakimś nginxie lub apatchu, więc nie masz możliwości przesłać informacji o plikach w tym katalogu.

Potrzebujesz odpalić prosty serwer rest np. w express, który jedyne co będzie robił to będzie odpowiadał na zapytanie do niego mówiąc jakie pliki znajdują się w tym katalogu. Wtedy będziesz mógł sobie we frontendzie wysłać do niego request i dowiedzieć się jakie pliki będą istnieć w katalogu /public/gallery.

Co do import.meta.glob to wygląda na to, że w czasie builda, vite patrzy jakie są pliki w tym katalogu i gdzieś zapisuje ich nazwy w wynikowym bundlu.
komentarz 20 lipca 2023 przez Oskar Szkurłat Bywalec (2,780 p.)
To co piszesz jest w pełni zrozumiałe :). Niestety w tym przypadku dostałem właśnie tylko dostęp do przestrzeni dyskowej. Gdyby nie to, napisałbym API i przechowywał ilustracje w DB. Bo tak chyba się powinno w takich przypadkach?
1
komentarz 20 lipca 2023 przez jankustosz1 Nałogowiec (35,880 p.)
To jedyne co mogę zaproponować to żebyś zrobił sobie jakiś plik tekstowy z listą nazw tych plików i przy dodawaniu kolejnych obrazów ten plik aktualizował. A frontend pierwsze co zrobi to pobierze sobie ten plik i zobaczy jakie obrazy są dostępne.

Ewentualnie możesz np. nazywać ten obraz 1.jpg, 2.jpg itd. wtedy frontend mógłby próbować pobrać kolejne numery aż nie dojdzie do 404.
komentarz 20 lipca 2023 przez Oskar Szkurłat Bywalec (2,780 p.)
Dosłownie zacząłem tak robić :)

No cóż to dziękuję bardzo za wyjaśnienie i rady

Podobne pytania

0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 26 grudnia 2020 w JavaScript przez sKodowany Obywatel (1,150 p.)
0 głosów
1 odpowiedź 223 wizyt
pytanie zadane 30 kwietnia 2019 w JavaScript przez Hasira Bywalec (2,100 p.)
0 głosów
0 odpowiedzi 204 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...