React Academy · Lektion

Ladda upp filer till ett backend-API

Använd FormData och fetch för att POST:a filer och följa uppladdningens förlopp.

Lektion 4 av 413 steg

Ladda upp filer till ett backend-API är en gratis lektion i React Academy på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Välkommen

I den här lektionen använder ni FormData API och fetch för att skicka filer med POST till en backend, följa uppladdningsförloppet med XMLHttpRequest och visa uppladdningens tillstånd i React.

FormData API

FormData är ett webbläsar-API som bygger request bodies i formatet multipart/form-data — det format som servrar förväntar sig vid filuppladdningar. Lägg till filen och eventuella metadatafält i ett FormData-objekt.
const formData = new FormData();
formData.append('file', selectedFile);
formData.append('description', 'Profile photo');

Ladda upp med fetch

Skicka FormData-objektet som fetch-body. Ange INTE Content-Type manuellt — webbläsaren anger automatiskt rätt multipart boundary.
const response = await fetch('/api/upload', {
  method: 'POST',
  body: formData,
  // Do not set Content-Type header here!
});

Hantera uppladdningens tillstånd

Håll reda på uppladdningens tillstånd med tre state-variabler: `uploading` (booleskt värde), `progress` (0–100) och `error` (sträng eller null). Visa laddningsindikatorer, förloppsfält och felmeddelanden utifrån dessa värden.
const [uploading, setUploading] = useState(false);
const [progress, setProgress] = useState(0);
const [error, setError] = useState(null);

Uppladdningsförlopp med XMLHttpRequest

fetch API har inte stöd för händelser som visar uppladdningsförlopp. Använd XMLHttpRequests `upload.onprogress`-händelse för att få procentuella uppdateringar.
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);

Omsluta XHR i ett Promise

Omslut XMLHttpRequest-anropet i ett Promise så att ni kan invänta det med await och använda felhantering med 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); })());
  });
}

Hantera serversvaret

Parsa serverns JSON-svar efter en lyckad uppladdning. Uppdatera UI-state med den returnerade URL:en eller det returnerade ID:t.
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);

Felhantering

Fånga alltid nätverks- och serverfel. Visa ett användarvänligt felmeddelande och tillåt nya försök. Återställ progress och uploading i catch-blocket.
try {
  setUploading(true);
  await uploadToServer(file);
} catch (err) {
  setError(err.message);
} finally {
  setUploading(false);
}

Avbryta en uppladdning

Använd en AbortController med fetch för att avbryta en pågående uppladdning. Spara controllern i en ref så att ni kan anropa abort() från en avbryt-knapp.
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();

Ladda upp flera filer

Ladda upp flera filer parallellt med Promise.all eller sekventiellt med en for-of-loop. Håll reda på individuellt förlopp per fil med ett objekt vars nycklar är filnamn.

Snabb kontroll

Varför bör ni INTE ange Content-Type-headern manuellt när ni använder fetch med FormData?

Sammanfattning

Använd FormData för att bygga uppladdningsdata. Använd fetch utan Content-Type så att boundary anges automatiskt. Använd XMLHttpRequest upload.onprogress för att följa förloppet. Hantera fel på ett bra sätt och stöd avbrytning med AbortController.

Kursen slutförd

Grattis! Ni har slutfört **Okontrollerade komponenter och filuppladdningar**. Nu kan ni hantera okontrollerade inmatningsfält, filval, dra och släpp samt multipart-uppladdningar med förloppsspårning.
Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”Ladda upp filer till ett backend-API” gratis?

Ja – hela texten till ”Ladda upp filer till ett backend-API” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Ladda upp filer till ett backend-API”?

Använd FormData och fetch för att POST:a filer och följa uppladdningens förlopp. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Ladda upp filer till ett backend-API”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Okontrollerade indatafält med useRef
  2. Filindata och läsa fildata
  3. Gränssnitt för filuppladdning med dra och släpp
  4. Ladda upp filer till ett backend-API
← Tillbaka till React Academy