Я уже реализовал метод для получения 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);
});
}