Jak dodać przesyłanie plików do aplikacji: przechowywanie, limity i bezpieczeństwo
Aby dodać przesyłanie plików do aplikacji, przechowuj pliki w magazynie obiektowym (buckecie), a nie na dysku serwera ani w bazie danych, a w bazie zapisuj niewielki rekord z kluczem pliku, nazwą, rozmiarem, typem i właścicielem. Sprawdzaj rozmiar i typ pliku po stronie serwera, z góry zdecyduj, czy pliki są publiczne (jak zdjęcia produktów), czy prywatne (jak faktury), i serwuj pliki prywatne dopiero po sprawdzeniu, kto o nie prosi. W narzędziu do budowy aplikacji AI możesz opisać funkcję przesyłania jednym promptem; najważniejsze jest przetestowanie, czy pliki przetrwają ponowne wdrożenie i czy nie może ich otworzyć niewłaściwa osoba.
Zdecyduj, jakie przesyłanie jest potrzebne
Zanim zaczniesz budować, odpowiedz na trzy pytania:
- Jakie pliki? Zdjęcia profilowe, zdjęcia produktów, PDF-y, arkusze kalkulacyjne, audio, wideo. To określa typ i limity rozmiaru.
- Kto może je zobaczyć? Wszyscy (publiczna galeria) czy tylko przesyłający i administratorzy (umowy, dokumenty tożsamości, pliki klientów).
- Co się dzieje po przesłaniu? Tylko zapis, podgląd, zmiana rozmiaru obrazów czy odczyt zawartości.
Publiczne obrazy i prywatne dokumenty wymagają różnych konfiguracji, więc najpierw rozstrzygnij to.
Gdzie powinny znajdować się pliki
| Opcja | Jak działa | Dobre do | Na co uważać |
|---|---|---|---|
| Magazyn obiektowy (bucket) | Pliki w usłudze stworzonej do ich przechowywania; baza zapisuje klucz lub adres URL | Prawie każdej aplikacji | Reguły dostępu muszą być ustawione poprawnie |
| Magazyn dostarczany przez platformę | Narzędzie do budowy lub hosting włącza dla ciebie bucket | Aplikacje zbudowane na tej platformie | Limity i ceny zależą od platformy |
| Dysk serwera | Pliki zapisane w systemie plików serwera aplikacji | Tylko lokalny rozwój | Często kasowane przy restarcie lub ponownym wdrożeniu |
| W bazie danych | Same bajty pliku w tabeli | Prawie nigdy | Puchnie baza, spowalnia kopie zapasowe |
| Zewnętrzny widżet do wysyłania | Hostowana usługa obsługuje cały proces | Ciężkie media, transformacje obrazów | Kolejny dostawca, konto i rachunek |
Dla większości aplikacji właściwą odpowiedzią jest magazyn obiektowy plus rekord w bazie danych. Wiersz w bazie to to, o co pyta twoja aplikacja („pokaż dokumenty tego użytkownika”); bucket tylko przechowuje bajty.
Pliki publiczne a prywatne
- Pliki publiczne (zdjęcia produktów, obrazy z bloga, awatary) mogą być serwowane z publicznego adresu URL. Każdy, kto ma link, może je otworzyć, co w tym przypadku jest w porządku.
- Pliki prywatne (faktury, umowy, dokumenty medyczne lub tożsamości, materiały dla klientów) nigdy nie mogą mieć publicznego, łatwego do odgadnięcia adresu URL. Serwer sprawdza, czy zalogowany użytkownik jest właścicielem pliku lub ma uprawnienia, a następnie albo przesyła plik, albo zwraca podpisany URL: link działający tylko przez krótki czas.
Częstym i poważnym błędem są prywatne pliki w publicznym buckecie o przewidywalnych nazwach. Ktoś, kto zgadnie /uploads/invoice-102.pdf, dostaje cudzą fakturę.
Przykładowe prompty
Przesyłanie publicznego obrazu:
Pozwól administratorom przesłać do 5 zdjęć produktu na produkt. Akceptuj JPG, PNG i WebP do 5 MB każdy. Zapisuj pliki w magazynie plików, zapisuj klucz, rozmiar i kolejność każdego pliku w tabeli product_images i pokaż miniatury z przyciskiem usunięcia. Waliduj typ i rozmiar po stronie serwera, a nie tylko w przeglądarce.
Przesyłanie prywatnego dokumentu:
Dodaj stronę Dokumenty dla zalogowanych klientów. Klienci mogą przesyłać pliki PDF do 20 MB. Pliki są prywatne: zapisuj je w magazynie plików, a w tabeli documents zapisuj ID właściciela, oryginalną nazwę pliku, rozmiar i czas przesłania. Pobrać mogą je tylko właściciel i administratorzy. Pobieranie przechodzi przez trasę serwerową, która sprawdza uprawnienia. Nigdy nie wystawiaj publicznego URL dla tych plików.
Przydatne uzupełnienia:
Pokaż pasek postępu podczas przesyłania oraz wyraźny błąd, gdy plik jest za duży lub ma zły typ.
Gdy wiersz dokumentu zostanie usunięty, usuń także zapisany plik.
Krok po kroku
- Ustal typy i limity rozmiaru dla każdego pola przesyłania. Bądź konkretny: „PDF do 20 MB”, a nie „dokumenty”.
- Włącz magazyn. W narzędziu AI poproś o przesyłanie, a ono skonfiguruje magazyn; gdzie indziej utwórz bucket i dodaj jego dane dostępowe jako sekrety po stronie serwera.
- Utwórz tabelę w bazie na rekordy plików: ID, właściciel, klucz w magazynie, oryginalna nazwa, typ, rozmiar, czas utworzenia.
- Zbuduj trasę przesyłania po stronie serwera: sprawdź, czy użytkownik jest zalogowany, sprawdź typ i rozmiar, wygeneruj bezpieczny klucz magazynu (a nie nazwę pliku od użytkownika), zapisz plik i wstaw rekord.
- Zbuduj ścieżkę pobierania lub wyświetlania: publiczny URL dla plików publicznych; trasę z kontrolą uprawnień lub podpisany URL dla prywatnych.
- Zbuduj interfejs: wybór pliku, ewentualnie przeciąganie i upuszczanie, postęp, podglądy, błędy.
- Obsłuż usuwanie, tak aby usunięcie rekordu usuwało także zapisany plik.
- Testuj: prześlij, przeładuj, ponownie wdróż lub opublikuj i sprawdź, czy plik nadal się ładuje. Następnie zaloguj się jako inny użytkownik i spróbuj otworzyć prywatny plik pierwszego.
Typowe błędy
- Zapisywanie przesyłanych plików na dysku serwera. Działa w rozwoju, a po restarcie lub ponownym wdrożeniu pliki znikają.
- Ufanie sprawdzeniom w przeglądarce. Atrybut „accept” pola wyboru pliku to podpowiedź, a nie zabezpieczenie. Sprawdzaj typ i rozmiar po stronie serwera.
- Używanie nazwy pliku od użytkownika jako klucza w magazynie. Nazwy się zderzają i mogą zawierać dziwne znaki. Generuj unikalny klucz, a oryginalną nazwę zapisz osobno.
- Publiczne buckety dla prywatnych plików. Patrz wyżej; to ten błąd trafia do wiadomości.
- Dopuszczanie każdego typu pliku. Pliki HTML lub SVG serwowane z twojej domeny mogą w niektórych konfiguracjach uruchamiać skrypty. Akceptuj tylko typy, których potrzebujesz.
- Brak limitu rozmiaru. Jeden ogromny plik może zużyć cały przydział magazynu lub przekroczyć czas żądania.
- Osierocone pliki. Usunięcie rekordu w bazie bez pliku powoli zapycha magazyn, za który płacisz.
- Zapomniany telefon. Zdjęcia z telefonu bywają duże i w formatach takich jak HEIC; zdecyduj, czy je akceptować, czy konwertować.
Lista kontrolna
- Pliki trafiają do magazynu obiektowego, a nie na dysk serwera ani do bazy
- Każdy plik ma rekord w bazie z właścicielem, kluczem, nazwą, typem i rozmiarem
- Typ i rozmiar sprawdzane po stronie serwera
- Klucze magazynu są generowane, a nie brane z nazwy pliku
- Prywatne pliki są serwowane dopiero po sprawdzeniu uprawnień
- Inny użytkownik nie może otworzyć twoich prywatnych plików, nawet mając link
- Usunięcie rekordu usuwa plik
- Pliki nadal się ładują po publikacji lub ponownym wdrożeniu
- Błędy przesyłania są jasno pokazywane, także na telefonie
Przesyłanie plików w Mythex
Mythex może automatycznie włączyć magazyn plików dla projektu, gdy aplikacja potrzebuje przesyłania, więc nie musisz ręcznie konfigurować bucketu. Możesz też wpisać /storage w czacie. Jest dostępny w planach Free i Pro, z limitem 1 GB w planie Free, a jego status zobaczysz w Settings → Storage.
Dokumentacja jasno mówi, że opublikowany hosting nie jest trwałym systemem plików lokalnych, więc poproś agenta o platformowy magazyn zamiast zapisu na dysku. Przechowywane pliki i pobrania są opłacane z salda kredytów, według rozmiaru i tego, ile jest pobierane; plan Pro płaci połowę stawki Free. Zobacz File storage w dokumentacji.
Przesyłanie zwykle idzie w parze z bazą danych dla rekordów plików i z logowaniem dla plików prywatnych. Jeśli budujesz miejsce, w którym klienci wymieniają się dokumentami, zobacz jak zbudować portal klienta, a przed startem przejdź przez listę kontrolną bezpieczeństwa.
Pytania
Gdzie należy przechowywać przesłane pliki?
W magazynie obiektowym (usłudze stworzonej do plików, często nazywanej bucketem), a nie na dysku serwera aplikacji i nie w bazie danych. W bazie zapisuj tylko klucz lub adres URL pliku oraz dane takie jak nazwa, rozmiar i właściciel.
Dlaczego moje przesłane pliki znikają po publikacji lub ponownym wdrożeniu?
Większość platform hostingowych nie zapewnia trwałego dysku lokalnego: gdy aplikacja się restartuje lub zostaje ponownie wdrożona, pliki zapisane na jej dysku przepadają. Zapisuj przesyłane pliki w magazynie obiektowym.
Jak zachować prywatność przesłanych plików?
Nie czyń plików publicznie czytelnymi. Serwer powinien sprawdzić, czy zalogowany użytkownik ma prawo je zobaczyć, a następnie wysłać plik lub zwrócić krótkotrwały podpisany link do niego.
Czy Mythex obsługuje przesyłanie plików?
Tak. Mythex może włączyć magazyn plików dla projektu, gdy aplikacja potrzebuje przesyłania, w planach Free i Pro, z limitem 1 GB w planie Free. Poproś agenta o funkcję przesyłania lub wpisz /storage.