JavaScript FormData: отправить файл и поля формы через fetch

Категория: JavaScript · Язык: JavaScript · Обновлено:

FormData собирает файл и обычные поля в multipart-запрос, который fetch отправляет на сервер. Браузер сам добавляет boundary в Content-Type, поэтому заголовок вручную задавать не нужно.

Рабочий пример

JavaScript
async function upload(form, url) {
  const body = new FormData(form);
  const response = await fetch(url, { method: 'POST', body });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  return response.json();
}

Передайте HTMLFormElement, чтобы включить поля с атрибутом name. Для отдельных значений используйте body.append('title', value) и body.append('file', file).

Частый вопрос

Как показать процент загрузки?

Fetch пока не предоставляет простой API прогресса отправки во всех браузерах. Для upload progress используйте XMLHttpRequest или подходящий потоковый API.