0Pricing
React Academy · Lezione

Caricamento di file su un'API backend

Utilizzi FormData e fetch per inviare file con POST e monitorare l'avanzamento del caricamento.

Caricamento di file su un'API backend è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Benvenuto

In questa lezione utilizzerà l'API FormData e fetch per inviare file a un backend con POST, tenere traccia dell'avanzamento del caricamento con XMLHttpRequest e visualizzare lo stato del caricamento in React.

API FormData

FormData è un'API del browser che costruisce i corpi delle richieste multipart/form-data, il formato che i server si aspettano per i caricamenti di file. Aggiunga il file e gli eventuali campi di metadati a un oggetto FormData.
const formData = new FormData();
formData.append('file', selectedFile);
formData.append('description', 'Profile photo');

Caricare con fetch

Passi l'oggetto FormData come corpo della richiesta fetch. NON imposti manualmente Content-Type: il browser imposta automaticamente il delimitatore multipart corretto.
const response = await fetch('/api/upload', {
  method: 'POST',
  body: formData,
  // Do not set Content-Type header here!
});

Gestione dello stato del caricamento

Tenga traccia dello stato del caricamento con tre variabili di stato: `uploading` (booleano), `progress` (da 0 a 100) ed `error` (stringa o null). Mostri indicatori di caricamento, barre di avanzamento e messaggi di errore in base a questi valori.
const [uploading, setUploading] = useState(false);
const [progress, setProgress] = useState(0);
const [error, setError] = useState(null);

Avanzamento del caricamento con XMLHttpRequest

L'API fetch non supporta gli eventi di avanzamento del caricamento. Usi l'evento `upload.onprogress` di XMLHttpRequest per ottenere aggiornamenti percentuali.
const xhr = new XMLHttpRequest();
xhr.upload.onprogress = (e) => {
  if (e.lengthComputable) {
    setProgress(Math.round((e.loaded / e.total) * 100));
  }
};
xhr.open('POST', '/api/upload');
xhr.send(formData);

Racchiudere XHR in una Promise

Racchiuda la chiamata XMLHttpRequest in una Promise, così potrà attenderla con await e usare la gestione degli errori con async/await.
function uploadFile(file) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.onload = () => resolve(xhr.response);
    xhr.onerror = () => reject(new Error('Upload failed'));
    xhr.upload.onprogress = (e) => setProgress(Math.round(e.loaded / e.total * 100));
    xhr.open('POST', '/api/upload');
    xhr.send(new FormData().set && (() => { const f = new FormData(); f.append('file', file); xhr.send(f); })());
  });
}

Gestire la risposta del server

Analizzi la risposta JSON del server dopo un caricamento riuscito. Aggiorni lo stato dell'interfaccia con l'URL o l'ID restituito.
const res = await fetch('/api/upload', { method: 'POST', body: fd });
if (!res.ok) throw new Error('Upload failed');
const { url } = await res.json();
setUploadedUrl(url);

Gestione degli errori

Intercetti sempre gli errori di rete e del server. Mostri un messaggio di errore comprensibile e consenta di riprovare. Reimposti lo stato dell'avanzamento e quello del caricamento nel blocco catch.
try {
  setUploading(true);
  await uploadToServer(file);
} catch (err) {
  setError(err.message);
} finally {
  setUploading(false);
}

Annullare un caricamento

Usi un AbortController con fetch per annullare un caricamento in corso. Memorizzi il controller in una ref, così potrà chiamare abort() da un pulsante di annullamento.
const abortRef = useRef();

const start = async () => {
  abortRef.current = new AbortController();
  await fetch('/api/upload', { body: fd, signal: abortRef.current.signal });
};
const cancel = () => abortRef.current?.abort();

Caricamenti di più file

Carichi più file in parallelo usando Promise.all oppure in sequenza con un ciclo for-of. Tenga traccia dell'avanzamento individuale di ogni file con un oggetto indicizzato per nome del file.

Verifica rapida

Perché NON dovrebbe impostare manualmente l'header Content-Type quando usa fetch con FormData?

Riepilogo

Usi FormData per costruire i dati da caricare. Usi fetch senza Content-Type per lasciare che il browser imposti automaticamente il delimitatore. Usi upload.onprogress di XMLHttpRequest per tenere traccia dell'avanzamento. Gestisca gli errori in modo appropriato e supporti l'annullamento con AbortController.

Corso completato

Congratulazioni! Ha completato **Componenti non controllati e caricamento di file**. Ora sa gestire gli input non controllati, la selezione dei file, il trascinamento e i caricamenti multipart con monitoraggio dell'avanzamento.

Domande Frequenti

La lezione «Caricamento di file su un'API backend» è gratuita?

Sì — il testo completo di «Caricamento di file su un'API backend» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «Caricamento di file su un'API backend»?

Utilizzi FormData e fetch per inviare file con POST e monitorare l'avanzamento del caricamento. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Caricamento di file su un'API backend»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Input non controllati con useRef
  2. Input per file e lettura dei dati
  3. Interfaccia di upload con trascinamento
  4. Caricamento di file su un'API backend
← Torna a React Academy