How do I upload a file with the JS fetch API? How do I upload a file with the JS fetch API? javascript javascript

How do I upload a file with the JS fetch API?


I've done it like this:

var input = document.querySelector('input[type="file"]')var data = new FormData()data.append('file', input.files[0])data.append('user', 'hubot')fetch('/avatars', {  method: 'POST',  body: data})


This is a basic example with comments. The upload function is what you are looking for:

// Select your input type file and store it in a variableconst input = document.getElementById('fileinput');// This will upload the file after having read itconst upload = (file) => {  fetch('http://www.example.net', { // Your POST endpoint    method: 'POST',    headers: {      // Content-Type may need to be completely **omitted**      // or you may need something      "Content-Type": "You will perhaps need to define a content-type here"    },    body: file // This is your file object  }).then(    response => response.json() // if the response is a JSON object  ).then(    success => console.log(success) // Handle the success response object  ).catch(    error => console.log(error) // Handle the error response object  );};// Event handler executed when a file is selectedconst onSelectFile = () => upload(input.files[0]);// Add a listener on your input// It will be triggered when a file will be selectedinput.addEventListener('change', onSelectFile, false);


An important note for sending Files with Fetch API

One needs to omit content-type header for the Fetch request. Then the browser will automatically add the Content type header including the Form Boundary which looks like

Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryfgtsKTYLsT7PNUVD

Form boundary is the delimiter for the form data