Guide

Come aggiungere il caricamento di file alla tua app: storage, limiti e sicurezza

Per aggiungere il caricamento di file alla tua app, conserva i file nell'object storage (un bucket), non sul disco del server né nel database, e salva nel database un piccolo record con la chiave del file, nome, dimensione, tipo e proprietario. Verifica dimensione e tipo del file sul server, decidi fin dall'inizio se i file sono pubblici (come le foto di prodotti) o privati (come le fatture), e servi i file privati solo dopo aver verificato chi li richiede. In un app builder basato sull'AI puoi descrivere la funzione di caricamento in un solo prompt; la parte importante è verificare che i file sopravvivano a un nuovo deploy e che non possano essere aperti dalla persona sbagliata.

Decidi che tipo di caricamenti ti servono

Prima di costruire, rispondi a tre domande:

  1. Quali file? Foto del profilo, immagini di prodotti, PDF, fogli di calcolo, audio, video. Questo determina i limiti di tipo e dimensione.
  2. Chi può vederli? Tutti (una galleria pubblica) oppure solo chi li ha caricati e gli amministratori (contratti, documenti d'identità, file dei clienti).
  3. Cosa succede dopo il caricamento? Solo salvataggio, anteprima, ridimensionamento delle immagini o lettura del contenuto.

Le immagini pubbliche e i documenti privati richiedono configurazioni diverse, quindi chiarisci prima questo punto.

Dove devono stare i file

OpzioneCome funzionaAdatta perAttenzione a
Object storage (bucket)File conservati in un servizio pensato per questo; il database memorizza una chiave o un URLQuasi tutte le appLe regole di accesso vanno impostate correttamente
Storage fornito dalla piattaformaIl tuo app builder o hosting attiva un bucket per teApp costruite su quella piattaformaLimiti e prezzi seguono la piattaforma
Disco del serverFile scritti sul filesystem del server dell'appSolo sviluppo localeSpesso cancellati al riavvio o al nuovo deploy
Nel databaseByte del file salvati in una tabellaQuasi maiGonfia il database, rallenta i backup
Widget di upload di terze partiUn servizio di upload ospitato gestisce l'intero flussoMedia pesanti, trasformazioni di immaginiUn altro fornitore, un altro account e un'altra fattura

Per la maggior parte delle app, la soluzione giusta è l'object storage più un record nel database. La riga del database è ciò che l'app interroga («mostra i documenti di questo utente»); il bucket contiene solo i byte.

File pubblici e privati

  • I file pubblici (foto di prodotti, immagini del blog, avatar) possono essere serviti da un URL pubblico. Chiunque abbia il link può aprirli, il che va bene per questo tipo di contenuti.
  • I file privati (fatture, contratti, documenti medici o d'identità, consegne ai clienti) non devono mai avere un URL pubblico facile da indovinare. Il server verifica che l'utente connesso ne sia proprietario o abbia il permesso, poi lo trasmette oppure restituisce un URL firmato: un link valido solo per un breve periodo.

Un bug comune e grave è quello dei file privati salvati in un bucket pubblico con nomi prevedibili. Chiunque indovini /uploads/invoice-102.pdf ottiene la fattura di qualcun altro.

Esempi di prompt

Caricamento di un'immagine pubblica:

Permetti agli admin di caricare fino a 5 foto prodotto per ogni prodotto. Accetta JPG, PNG e WebP fino a 5 MB ciascuna. Conserva i file nello storage dei file, salva chiave, dimensione e ordine di ogni file in una tabella product_images, e mostra le miniature con un pulsante di rimozione. Valida tipo e dimensione sul server, non solo nel browser.

Caricamento di un documento privato:

Aggiungi una pagina Documenti per i clienti connessi. I clienti possono caricare PDF fino a 20 MB. I file sono privati: conservali nello storage dei file, salva ID del proprietario, nome originale, dimensione e orario di caricamento in una tabella documents, e consenti il download solo al proprietario e agli admin. I download passano da una route del server che verifica il permesso. Non esporre mai un URL pubblico per questi file.

Follow-up utili:

Mostra una barra di avanzamento durante il caricamento e un errore chiaro se il file è troppo grande o del tipo sbagliato.

Quando un record di documento viene eliminato, elimina anche il file memorizzato.

Passo dopo passo

  1. Scegli tipi e limiti di dimensione per ogni campo di caricamento. Sii preciso: «PDF fino a 20 MB», non «documenti».
  2. Attiva lo storage. In un app builder AI, chiedi i caricamenti e lui configurerà lo storage; altrove, crea un bucket e aggiungi le sue credenziali come segreti lato server.
  3. Crea una tabella nel database per i record dei file: ID, proprietario, chiave di storage, nome originale, tipo, dimensione, data di creazione.
  4. Costruisci la route di caricamento sul server: verifica che l'utente sia connesso, controlla tipo e dimensione, genera una chiave di storage sicura (non il nome file dell'utente), salva il file, inserisci il record.
  5. Costruisci il percorso di download o visualizzazione: URL pubblico per i file pubblici; route con verifica dei permessi o URL firmato per quelli privati.
  6. Costruisci l'interfaccia: selettore file, drag and drop se utile, avanzamento, anteprime, errori.
  7. Gestisci le eliminazioni in modo che rimuovere un record rimuova anche il file memorizzato.
  8. Verifica: carica, ricarica, ridistribuisci o pubblica, e controlla che il file si carichi ancora. Poi accedi con un altro utente e prova ad aprire il file privato del primo.

Errori comuni

  • Scrivere i caricamenti sul disco del server. Funziona in sviluppo, poi i file spariscono dopo un riavvio o un nuovo deploy.
  • Fidarsi dei controlli del browser. L'impostazione «accept» di un campo file è un suggerimento, non una sicurezza. Verifica tipo e dimensione sul server.
  • Usare il nome file dell'utente come chiave di storage. I nomi si scontrano e possono contenere caratteri strani. Genera una chiave unica e salva il nome originale a parte.
  • Bucket pubblici per file privati. Vedi sopra; è quello che finisce sulle notizie.
  • Permettere qualsiasi tipo di file. I file HTML o SVG serviti dal tuo dominio possono eseguire script in alcune configurazioni. Accetta solo i tipi che ti servono.
  • Nessun limite di dimensione. Un solo caricamento enorme può esaurire la quota di storage o far scadere la richiesta.
  • File orfani. Eliminare il record nel database ma non il file riempie lentamente lo storage per cui paghi.
  • Dimenticare il mobile. Le foto dei telefoni possono essere grandi e in formati come HEIC; decidi se accettarli o convertirli.

Checklist

  • I file vanno nell'object storage, non sul disco del server né nel database
  • Ogni file ha un record nel database con proprietario, chiave, nome, tipo e dimensione
  • Tipo e dimensione verificati sul server
  • Le chiavi di storage sono generate, non prese dal nome del file
  • I file privati vengono serviti solo dopo un controllo dei permessi
  • Un altro utente non può aprire i tuoi file privati, nemmeno con il link
  • Eliminare un record elimina il file
  • I file si caricano ancora dopo la pubblicazione o un nuovo deploy
  • Gli errori di caricamento sono mostrati chiaramente, anche su telefono

Caricamento di file in Mythex

Mythex può attivare automaticamente lo storage dei file per un progetto quando la tua app ha bisogno di caricamenti, così non devi configurare un bucket a mano. Puoi anche scrivere /storage in chat. È disponibile nei piani Free e Pro, con un limite di 1 GB nel piano Free, e puoi vederne lo stato in Impostazioni → Storage.

La documentazione è esplicita nel dire che l'hosting pubblicato non è un filesystem locale persistente, quindi chiedi all'agente di usare lo storage della piattaforma invece di salvare su disco. I file memorizzati e i download si pagano con il tuo saldo di crediti, in base alla dimensione e a quanto viene scaricato; con Pro si paga metà della tariffa del piano Free. Vedi Storage dei file nella documentazione.

I caricamenti vanno di solito insieme a un database per i record dei file e al login per i file privati. Se stai costruendo uno spazio in cui i clienti si scambiano documenti, vedi come costruire un portale clienti, e prima del lancio controlla la checklist di sicurezza.

Domande

Dove devono essere conservati i file caricati?

Nell'object storage (un servizio pensato per i file, spesso chiamato bucket), non sul disco del server dell'app e non dentro il database. Nel database salva solo la chiave o l'URL del file, insieme a dettagli come nome, dimensione e proprietario.

Perché i miei file caricati scompaiono dopo la pubblicazione o un nuovo deploy?

La maggior parte delle piattaforme di hosting non mantiene un disco locale persistente: quando l'app si riavvia o viene ridistribuita, i file scritti sul suo disco vanno persi. Salva i caricamenti nell'object storage.

Come mantengo privati i file caricati?

Non renderli leggibili pubblicamente. Fai in modo che il server verifichi che l'utente connesso possa vedere un file, poi invialo o restituisci un link firmato a breve scadenza.

Mythex supporta il caricamento di file?

Sì. Mythex può attivare lo storage dei file per un progetto quando l'app ha bisogno di caricamenti, sia nel piano Free sia in Pro, con un limite di 1 GB nel piano Free. Chiedi all'agente la funzione di caricamento oppure scrivi /storage.

Mythex · Pricing · Crea qualsiasi cosa con l'AI · Template per siti web e app · Mythex a confronto · Glossario per creare app con l'AI · Strumenti gratuiti per creare app con l'AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)