/ / Javascript-файл повернення з веб-служби - javascript, jquery, json, скачати

Javascript повертає файл з веб-сервісу - javascript, jquery, json, download

Я намагаюся зробити завантаження файлів за допомогою JavaScript з веб-сервісу. Повернення даних веб-служби у рядку JSON із форматом нижче:

{
"status": "OK",
"encodedFile": "AAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpLAAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpL"
}

EncodedFile - це форма файлу, кодована Base64байти з веб-сервісу. Веб-сервіс отримує файл на сервері, перетворює файл у масив байтів, а потім кодує масив байтів у рядок за допомогою Base64 і повертає відповідь у форматі JSON, щоб javascript отримав рядок. Після того як я отримаю рядок і розшифрую його (я отримую байти файлу), як я можу повернути його (байти) у вигляді завантаження файлу? В основному, тепер у мене є байти файлу, і я хочу повернути його для завантаження файлу.

Я використовую jquery ajax, щоб отримати відповідь, отримати "статус" та отримати "закодований файл". Будь-яка допомога чи пропозиція буде вдячна. Спасибі заздалегідь.

Відповіді:

3 для відповіді № 1

По-перше, ми можемо взяти закодовану крапку Base64 ірозшифруйте його. Потім беремо отриманий рядок, примушуємо його до непідписаного 8-бітового байтового масиву (як і належить) і створюємо крапку з байтів. Нарешті, ми створюємо URL-адресу для цього краплини і встановлюємо для нього window.location (хоча ви, ймовірно, хочете відкрити блоб на окремій вкладці).

var data = atob("AAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpLAAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpL")
var bytes = new Array(data.length);
for (var i = 0; i < data.length; i++) {
bytes[i] = data.charCodeAt(i);
}
bytes = new Uint8Array(bytes);
var blob = new Blob([bytes]);
window.location = URL.createObjectURL(blob);