0Pricing
React Academy · Pelajaran

Mengunggah File ke API Backend

Gunakan FormData dan fetch untuk melakukan POST file serta melacak progres unggahan.

Mengunggah File ke API Backend adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Selamat datang

Dalam pelajaran ini, Anda akan menggunakan API FormData dan fetch untuk melakukan POST berkas ke peladen, melacak kemajuan pengunggahan dengan XMLHttpRequest, dan menampilkan status pengunggahan di React.

API FormData

FormData adalah API peramban yang membentuk badan permintaan multipart/form-data — format yang diharapkan peladen untuk pengunggahan berkas. Tambahkan berkas dan kolom metadata apa pun ke objek FormData.
const formData = new FormData();
formData.append('file', selectedFile);
formData.append('description', 'Profile photo');

Mengunggah dengan fetch

Teruskan objek FormData sebagai badan fetch. Jangan tetapkan Content-Type secara manual — peramban akan menetapkan batas multipart yang benar secara otomatis.
const response = await fetch('/api/upload', {
  method: 'POST',
  body: formData,
  // Do not set Content-Type header here!
});

Pengelolaan Status Pengunggahan

Lacak status pengunggahan dengan tiga variabel state: `uploading` (boolean), `progress` (0–100), dan `error` (teks atau null). Tampilkan pemutar, bilah kemajuan, dan pesan kesalahan berdasarkan nilai-nilai tersebut.
const [uploading, setUploading] = useState(false);
const [progress, setProgress] = useState(0);
const [error, setError] = useState(null);

Kemajuan Pengunggahan dengan XMLHttpRequest

API fetch tidak mendukung peristiwa kemajuan pengunggahan. Gunakan peristiwa `upload.onprogress` milik XMLHttpRequest untuk memperoleh pembaruan persentase.
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);

Membungkus XHR dalam Promise

Bungkus pemanggilan XMLHttpRequest dalam Promise agar Anda dapat menunggunya dengan await dan menggunakan penanganan kesalahan 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); })());
  });
}

Menangani Respons Peladen

Uraikan respons JSON dari peladen setelah pengunggahan berhasil. Perbarui state antarmuka dengan URL atau ID yang dikembalikan.
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);

Penanganan Kesalahan

Selalu tangkap kesalahan jaringan dan peladen. Tampilkan pesan kesalahan yang mudah dipahami pengguna dan izinkan percobaan ulang. Atur ulang kemajuan dan state pengunggahan di blok penangkap.
try {
  setUploading(true);
  await uploadToServer(file);
} catch (err) {
  setError(err.message);
} finally {
  setUploading(false);
}

Membatalkan Pengunggahan

Gunakan AbortController dengan fetch untuk membatalkan pengunggahan yang sedang berlangsung. Simpan pengendali tersebut dalam ref agar Anda dapat memanggil abort() dari tombol pembatalan.
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();

Pengunggahan Banyak Berkas

Unggah beberapa berkas secara paralel menggunakan Promise.all, atau secara berurutan dengan perulangan for-of. Lacak kemajuan setiap berkas secara terpisah menggunakan objek yang kuncinya berupa nama berkas.

Pemeriksaan Singkat

Mengapa Anda tidak boleh menetapkan header Content-Type secara manual saat menggunakan fetch dengan FormData?

Rangkuman

Gunakan FormData untuk membentuk muatan pengunggahan. Gunakan fetch tanpa Content-Type agar batas ditetapkan secara otomatis. Gunakan upload.onprogress milik XMLHttpRequest untuk melacak kemajuan. Tangani kesalahan dengan baik dan dukung pembatalan dengan AbortController.

Kursus Selesai

Selamat! Anda telah menyelesaikan **Komponen Tak Terkontrol & Pengunggahan Berkas**. Kini Anda dapat menangani input tak terkontrol, pemilihan berkas, seret dan lepas, serta pengunggahan multipart dengan pelacakan kemajuan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengunggah File ke API Backend” gratis?

Ya — teks lengkap “Mengunggah File ke API Backend” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengunggah File ke API Backend”?

Gunakan FormData dan fetch untuk melakukan POST file serta melacak progres unggahan. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Mengunggah File ke API Backend” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Input Tak Terkontrol dengan useRef
  2. Input File dan Membaca Data File
  3. Antarmuka Unggah File dengan Seret dan Lepas
  4. Mengunggah File ke API Backend
← Kembali ke React Academy