Sådan tilføjer du filupload til din app: lagring, grænser og sikkerhed
For at tilføje filupload til din app gemmer du filerne i objektlagring (en bucket), ikke på din servers disk eller i din database, og gemmer en lille post i databasen med filens nøgle, navn, størrelse, type og ejer. Kontrollér filstørrelse og type på serveren, beslut på forhånd, om filer er offentlige (som produktfotos) eller private (som fakturaer), og lever kun private filer, efter at du har kontrolleret, hvem der spørger. I et AI-værktøj til apps kan du beskrive upload-funktionen i én prompt; det vigtige er at teste, at filer overlever en gendeployment, og at de ikke kan åbnes af den forkerte person.
Beslut hvilken type uploads du har brug for
Før du bygger, så besvar tre spørgsmål:
- Hvilke filer? Profilbilleder, produktbilleder, PDF'er, regneark, lyd, video. Det bestemmer type- og størrelsesgrænser.
- Hvem må se dem? Alle (et offentligt galleri) eller kun uploaderen og administratorer (kontrakter, ID-dokumenter, klientfiler).
- Hvad sker der efter upload? Bare gem den, vis en forhåndsvisning, skalér billeder, eller læs indholdet.
Offentlige billeder og private dokumenter kræver forskellige opsætninger, så afklar dette først.
Hvor filer skal ligge
| Mulighed | Sådan virker den | Godt til | Vær opmærksom på |
|---|---|---|---|
| Objektlagring (bucket) | Filer gemt i en tjeneste bygget til dem; din database gemmer en nøgle eller URL | Næsten alle apps | Adgangsregler skal være sat korrekt |
| Platformsleveret lagring | Dit app-værktøj eller din host aktiverer en bucket for dig | Apps bygget på den platform | Grænser og priser følger platformen |
| Serverdisk | Filer skrevet til app-serverens filsystem | Kun lokal udvikling | Slettes ofte ved genstart eller gendeployment |
| I databasen | Filbytes gemt i en tabel | Næsten aldrig | Opblæser databasen, gør backups langsommere |
| Tredjeparts upload-widget | En hostet uploadtjeneste håndterer hele flowet | Tung medie, billedtransformationer | Endnu en leverandør, konto og regning |
Til de fleste apps er objektlagring plus en databasepost det rigtige svar. Databasens række er det, din app forespørger ("vis denne brugers dokumenter"); bucket'en holder blot bytes.
Offentlige vs. private filer
- Offentlige filer (produktfotos, blogbilleder, avatarer) kan serveres fra en offentlig URL. Alle med linket kan åbne dem, hvilket er fint for denne type indhold.
- Private filer (fakturaer, kontrakter, medicinske eller ID-dokumenter, klientleverancer) må aldrig have en gætbar offentlig URL. Serveren kontrollerer, at den indloggede bruger ejer filen eller har tilladelse, og sender den derefter eller returnerer en signeret URL: et link, der kun virker i kort tid.
En almindelig og alvorlig fejl er private filer gemt i en offentlig bucket med forudsigelige navne. Den, der gætter /uploads/invoice-102.pdf, får en andens faktura.
Eksempler på prompts
Upload af et offentligt billede:
Lad administratorer uploade op til 5 produktfotos pr. produkt. Acceptér JPG, PNG og WebP op til 5 MB hver. Gem filerne i fillagring, gem hver fils nøgle, størrelse og rækkefølge i en product_images-tabel, og vis miniaturer med en fjern-knap. Valider type og størrelse på serveren, ikke kun i browseren.
Upload af et privat dokument:
Tilføj en Dokumenter-side for indloggede klienter. Klienter kan uploade PDF'er op til 20 MB. Filerne er private: gem dem i fillagring, gem ejer-ID, oprindeligt filnavn, størrelse og uploadtidspunkt i en documents-tabel, og lad kun ejeren og administratorer downloade dem. Downloads går gennem en serverrute, der kontrollerer tilladelser. Eksponér aldrig en offentlig URL til disse filer.
Nyttige opfølgninger:
Vis en statuslinje under upload og en klar fejl, hvis filen er for stor eller af forkert type.
Når en dokumentrække slettes, skal den gemte fil også slettes.
Trin for trin
- Vælg typer og størrelsesgrænser for hvert uploadfelt. Vær specifik: "PDF op til 20 MB", ikke "dokumenter".
- Aktivér lagring. I et AI-værktøj beder du om uploads, og det opsætter lagringen; andre steder opretter du en bucket og tilføjer dens legitimationsoplysninger som hemmeligheder på serveren.
- Opret en databasetabel til filposter: ID, ejer, lagringsnøgle, oprindeligt navn, type, størrelse, oprettelsestidspunkt.
- Byg upload-ruten på serveren: kontrollér at brugeren er logget ind, kontrollér type og størrelse, generér en sikker lagringsnøgle (ikke brugerens filnavn), gem filen, indsæt posten.
- Byg download- eller visningsstien: offentlig URL til offentlige filer; en tilladelseskontrolleret rute eller signeret URL til private.
- Byg brugerfladen: filvælger, træk-og-slip hvis nyttigt, statuslinje, forhåndsvisninger, fejl.
- Håndtér sletning, så fjernelse af en post også fjerner den gemte fil.
- Test: upload, genindlæs, gendeployér eller publicér, og kontrollér at filen stadig kan indlæses. Log så ind som en anden bruger og forsøg at åbne den første brugers private fil.
Almindelige fejl
- At skrive uploads til serverens disk. Det virker i udvikling, og derefter forsvinder filerne ved genstart eller gendeployment.
- At stole på browserens kontroller. Et filfelts "accept"-indstilling er et hint, ikke sikkerhed. Kontrollér type og størrelse på serveren.
- At bruge brugerens filnavn som lagringsnøgle. Navne kolliderer og kan indeholde underlige tegn. Generér en unik nøgle og gem det oprindelige navn separat.
- Offentlige buckets til private filer. Se ovenfor; det er den, der kommer i nyhederne.
- At tillade enhver filtype. HTML- eller SVG-filer serveret fra dit domæne kan køre scripts i nogle opsætninger. Acceptér kun de typer, du har brug for.
- Ingen størrelsesgrænse. Én enorm upload kan æde din lagringskvote eller få anmodningen til at time ud.
- Forældreløse filer. Hvis du sletter databasepostet men ikke filen, fylder det langsomt den lagring, du betaler for.
- At glemme mobil. Telefonfotos kan være store og i formater som HEIC; beslut om du vil acceptere dem eller konvertere dem.
Tjekliste
- Filer går til objektlagring, ikke serverdisken eller databasen
- Hver fil har en databasepost med ejer, nøgle, navn, type og størrelse
- Type og størrelse kontrolleres på serveren
- Lagringsnøgler genereres, tages ikke fra filnavnet
- Private filer serveres kun efter en tilladelseskontrol
- En anden bruger kan ikke åbne dine private filer, selv med linket
- Sletning af en post sletter filen
- Filer indlæses stadig efter publicering eller gendeployment
- Uploadfejl vises tydeligt, også på telefon
Filupload i Mythex
Mythex kan aktivere fillagring for et projekt automatisk, når din app har brug for uploads, så du ikke skal oprette en bucket i hånden. Du kan også skrive /storage i chatten. Det er tilgængeligt på Free og Pro, med en grænse på 1 GB på Free, og du kan se dens status under Indstillinger → Lagring.
Dokumentationen er tydelig på, at publiceret hosting ikke er et varigt lokalt filsystem, så bed agenten bruge platformens lagring i stedet for at gemme på disken. Lagrede filer og downloads betales fra din kreditsaldo, efter størrelse og efter hvor meget der downloades; Pro betaler halvdelen af Free-prisen. Se Fillagring i dokumentationen.
Uploads hænger typisk sammen med en database til filposterne og login til private filer. Hvis du bygger et sted, hvor klienter udveksler dokumenter, så se sådan bygger du en klientportal, og gennemgå sikkerhedstjeklisten før lancering.
Spørgsmål
Hvor skal uploadede filer gemmes?
I objektlagring (en tjeneste bygget til filer, ofte kaldet en bucket), ikke på app-serverens disk og ikke i databasen. Gem kun filens nøgle eller URL, plus oplysninger som navn, størrelse og ejer, i din database.
Hvorfor forsvinder mine uploadede filer, efter jeg publicerer eller gendeployer?
De fleste hostingplatforme har ikke en varig lokal disk: når appen genstarter eller gendeployes, går filer skrevet til dens disk tabt. Gem uploads i objektlagring i stedet.
Hvordan holder jeg uploadede filer private?
Gør ikke filerne offentligt læsbare. Lad din server kontrollere, at den indloggede bruger må se en fil, og send den derefter, eller returnér et kortlevet signeret link til den.
Understøtter Mythex filupload?
Ja. Mythex kan aktivere fillagring for et projekt, når appen har brug for uploads, på Free og Pro, med en grænse på 1 GB på Free. Du beder agenten om upload-funktionen eller skriver /storage.