Re[2]: base64 from js download as binary
От: vaa  
Дата: 24.03.23 03:29
Оценка:
Здравствуйте, Igorxz, Вы писали:

I>Здравствуйте, vaa, Вы писали:


vaa>>Плагин криптопро работает с base64 данными.

vaa>>Поэтому подписи и шифр отгружаются клиенту в текстовом формате (enc).
vaa>>А хочется в двоичном (p7e). Можно конечно шифр отправлять на сервер и оттуда загружать преобразованный.
vaa>>Но может спецы знают как преобразовать данные в браузере?

I>
I>let create_blob_from_base64String = function (base64String, contentType) {
I>    const byteCharacters = atob(base64String);
I>    const byteNumbers = new Array(byteCharacters.length);
I>    for (let i = 0; i < byteCharacters.length; i++) {
I>        byteNumbers[i] = byteCharacters.charCodeAt(i);
I>    }
I>    const byteArray = new Uint8Array(byteNumbers);
I>    const blob = new Blob([byteArray], { type: contentType || 'text/json' });
I>    return (blob);
I>}
I>




Спасибо! Я правда немного не так сделал, у меня кусками данные. Так отработало.
    function _base64ToArrayBuffer(base64String) {
        console.log(base64String);
        const byteCharacters = atob(base64String);
        const byteNumbers = new Array(byteCharacters.length);
        for (let i = 0; i < byteCharacters.length; i++) {
            byteNumbers[i] = byteCharacters.charCodeAt(i);
        }
        return byteNumbers;
    }
    arr = arr.concat(_base64ToArrayBuffer(chunk));
    new Blob([arr], { type: "octet/stream" });


Но все равно облом. Похоже ограничение размера массива где-то в районе 64Мб, исходный файл 81Мб, чанк 1МБ, на 77% такая шляпа:
 Uncaught (in promise) RangeError: Invalid array length
    at Array.concat (<anonymous>)
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.