Send asynchronous browser requests with fetch, XMLHttpRequest, JSON, errors, and progressive UI.
Lessons
Upload files asynchronously with progress.
Uploading Files is easiest to learn by reading the example, changing it, and observing the result.
const form = new FormData();
form.append('avatar', fileInput.files[0]);
form.append('title', 'My upload');
const xhr = new XMLHttpRequest();
xhr.open('POST', '/api/upload');
xhr.upload.onprogress = e => {
if (e.lengthComputable) {
const percent = Math.round((e.loaded / e.total) * 100);
document.querySelector('#bar').style.width = percent + '%';
}
};
xhr.onload = () => console.log('Done', xhr.status);
xhr.send(form); // do NOT set Content-Type; the browser adds the boundaryPractice the Uploading Files example in a small scratch file, then explain what changed and why.