Получить base64 в старом добром IE11 (не используя обещания) - PullRequest
0 голосов
/ 11 марта 2019

Я уже реализовал метод для получения base64 из файла, используя обещания. Который отлично работает в ребрах, Chrome и Firefox.

Проблема в том, что я также должен заставить его работать в Internet Explorer 11. Который не любит обещания, которые я узнал. Проблема в том, что IE11 использует ES5, а Promises пришел в ES6. (Пожалуйста, поправьте меня, если я ошибаюсь)

Так что у меня есть 3 варианта, как я вижу.

  • Попробуйте переписать код с помощью обратных вызовов, чтобы IE11 знал синтаксис.
  • Использование babel (что я не пробовал, но читал, что это было возможно)
  • Использование bluebirdjs (что я тоже не пробовал, но читал, что это вариант)

Какой для меня лучший вариант?

Вот мой код, который мне нужно изменить:

$('#fileselected').change(function (e) {
    var fileList = document.getElementById('fileselected').files;
    var file = fileList[0]; // User can only choose one file at a time

    getBase64(file).then(
        data => {
            var fileObj = { name: file.name, base64: data };
            postFilesToUpload.push(fileObj); // Collecting the files, if user wants to add multiple
        }
    );

    $("#postfilesadded").append("<li><h5>" + file.name + "</h5></li>"); // Show the user which files he have selected to upload
});

Этот метод использует другой метод, который мне нужно изменить:

function getBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = error => reject(error);
  });
}
...