#javascript #aurelia
#javascript #aurelia
Вопрос:
Мне нужно декодировать строку base64 в файл PDF. Я использую этот код. Но окном.команда atob всегда сообщает об этой ошибке: Не удалось выполнить ‘atob’ в ‘Window’: строка, подлежащая декодированию, неправильно закодирована.
Я знаю, что файл правильный, потому что я уже декодировал его с помощью веб-сайта, который декодирует base64 в pdf. Я не знаю, помогает ли это, но мы используем Aurelia Framework.
Функцией, которая преобразует
function converBase64toBlob(content, contentType) {
contentType = contentType || '';
var sliceSize = 512;
var byteCharacters = window.atob(content); //method which converts base64 to binary
var byteArrays = [
];
for (var offset = 0; offset < byteCharacters.length; offset = sliceSize) {
var slice = byteCharacters.slice(offset, offset sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i ) {
byteNumbers[i] = slice.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
var blob = new Blob(byteArrays, {
type: contentType
}); //statement which creates the blob
return blob;
}
Вызов функции
self.blob = self.converBase64toBlob(result.contents[0].pdf.replace(/^[^,] ,/, ''), 'application/pdf');
self.blobURL = URL.createObjectURL(blob);
window.open(this.blobURL);
Комментарии:
1. обратите внимание, что я полностью уверен, но я видел, как кто-то добавлял ‘=’ в конец до 2 раз, а затем это сработало
2. Я не думаю, что вы можете просто удалить символы из base64
.replace(/^[^,] ,/, '')
, не нарушая кодировку3. Спасибо за помощь, я уже пробовал без replace() и не сработал. Что касается добавления ‘=’ в конце, также не сработало.
Ответ №1:
Я нашел решение. API возвращал строку base64 с символом ». Итак, я удалил все это, и это работает просто отлично.
Комментарии:
1. В моем случае это был символ ‘=’. В любом случае, ваш комментарий помог мне понять идею, теперь это работает!
Ответ №2:
Убедитесь, что вы правильно обработали undefined
регистр. В моем случае мой токен обнулялся после обновления, поэтому я, по сути, выполнял atob()
с undefined
токеном, вызывая эту ошибку.