function uploadFile(data) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.upload.addEventListener('progress', updateProgress);
    xhr.upload.addEventListener('load', transferComplete);
    xhr.upload.addEventListener('error', transferFailed);
    xhr.open('PUT', presignedURL);
    xhr.setRequestHeader('Content-Type', 'application/octet-stream');
    xhr.send(data);
    function updateProgress(event) {
      if (event.lengthComputable) {
        var percentComplete = event.loaded / event.total;
        console.log('percentComplete', percentComplete);
      } else {
        console.log('Unable to compute progress information since the total size is unknown');
      }
    }
    function transferComplete(evt) {
      console.log('The transfer is complete.');
      resolve('complete');
    }
    function transferFailed(evt) {
      console.log('An error occurred while transferring the file.');
      reject('An error occurred while transferring the file.', evt);
    }
  });
}