Преобразовать данные json в соответствующий тип файла - PullRequest
0 голосов
/ 09 января 2020

Я сделал запрос на получение Ajax для получения файла из источника API, и мне были возвращены данные json (данные json приведены ниже). Имя файла и тип файла - это title и file_type соответственно в соответствии с возвращаемым объектом json. Как мне преобразовать это в PNG (согласно этому примеру данных json) или в любой другой тип файла в этом отношении в зависимости от возвращаемых данных json. Когда я делаю запрос, мне нужно иметь возможность преобразовать файл json в его объект и автоматически загрузить.

Я попробовал предложения по ссылке ниже, но безуспешно: Загрузка JSON объекта в виде файла из браузера

Спасибо,

Образец JSON Данные

{
  "body": "iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAeFBMVEUdHRv\/\/\/8AAAALCwfExMQbGxn6+vp\/f37Ly8urq6sUFBH19fW6uroODgsGBgCGhoV2dnbn5+fh4eFVVVT29vazs7Pa2trm5ubR0dFxcXDHx8deXl2Tk5KYmJg2NjVlZWSMjIxBQUAjIyFDQ0IzMzFMTEqioqEtLSvWSZHOAAAJcklEQVR4nO2d22LiIBCGKxGjMYmnaj1rt619\/zdcYnRNOISBkIRx\/a+6a6v5BGaGAYa33rPrresHaFwvQvx6EeLXixC\/XoT49SLErxehMw1m89Wwn2u4ms8GbX1w44TjVXyYLn6JqN\/F9BCvxk0\/QJOEs\/5+l2QsSUTfRNHo+mKw2\/dnDT5FU4Tz0SZijy9F40FT9h1sRvOGnqQJwkE\/ZHSJHq6AyZozmcZNDE7nhO\/LHet5JnRFysXS+bh0TBgzvMiC7i7W9rvY7SO5JFyF9fD+QYYrh0\/ljjD+IkFtvFwB+XTXkI4IB5fEQfM9FJH04MjsOCEc7AmxsS1VooScnVgdB4SDMyGO8XKl5OygHesTHhriy0TIoXPCOGmO78oYLDslXH06H3+8KPms5ztqEYZO7adKEZl2RNgPmu2gD6Wk3wHhYNN4B32IkpO1VbUlHAauAhiYAjJsl3DSYgPmoiRskXB8bGsEFkWOVqkAG8JhKyZUVGRlcCwID6330Lso2bdBeOqih95Fdo0TDjoZgg+l36YTDkPCWZR0CsgGY\/DRJOGqIxtTFCVmcaoR4bozG1MUNXP+JoRbLwCZjLyGAWG\/WxtTlAkinHDrD6ARIphw7RMgQwSPRSjhypcxeBfYogIJZ74BMosK9IswwkHUvR\/kRQNYdAMjPHYdycgUfbsj7DTYVisFheEQwoOfgMzanN0QDn0FhLlFPeHYOzNaENEnNvSEn\/6Z0YcA1kZLOPG3j2bSZ+B0hB4PwlxkW49wYLWrok1RosmGawg37Wa2bRSc6hB6NCVUi1Tvaqgm9L6PZtL000rCEEMTsuitcn2xinCFA1AzV6wi9NrXFxUd7QhjLE3IGrFiO0MFodH2yW5FiQ2ht3MmmSoWpZSEA0yADPHdmPCMizCdmBIia0LWiKq8lIoQWRNWNK...",
  "comments": null,
  "container": "ENC~77-977-977-977-9X--_ve-_vSfvv73vv70V77-9XO-_ve-_vT7DgO-_ve-_vX5-fn9FKQdumeQp5-W6Z1k_WPY=",
  "file_type": ".PNG",
  "is_container": false,
  "last_modified": "2020-01-09T11:37:05",
  "record_number": "00\/11",
  "record_type": "Inwards Document",
  "title": "Test",
  "unique_identifier": "13112318",
  "is_public": true,
  "site": null
}

Ответы [ 2 ]

0 голосов
/ 14 января 2020

не волнуйтесь - разобрался ..

Хотя, это не работает для сафари. :(

 Ajax.request({
        url: _url,

        success: function (response, opts) {
            var obj = Ext.decode(response.responseText);
            if (obj !== null) {

                var docName = `${obj.title}${obj.file_type}`;
                var a = window.document.createElement('a');
                //debugger;

                var byteCharacters = atob(obj.body);
                var byteNumbers = new Array(byteCharacters.length);
                for (var i = 0; i < byteCharacters.length; i++) {
                    byteNumbers[i] = byteCharacters.charCodeAt(i);
                }
                var byteArray = new Uint8Array(byteNumbers);

                // now that we have the byte array, construct the blob from it
                var blob1 = new Blob([byteArray], { type: "application/octet-stream" });

                //saveAs(doc, docName);
                a.href = window.URL.createObjectURL(blob1);
                a.download = docName;

                // Append anchor to body.
                document.body.appendChild(a);
                a.click();

                //// Remove anchor from body
                document.body.removeChild(a);
            }
        },

        failure: function (response, opts) {

...}});

0 голосов
/ 09 января 2020

с использованием JavaScript использование:

window.location.href = 'data: image / png; base64,' + body;

с использованием тега HTML:

<a download="photo.png" href="data:image/png;base64,asdasd...">Download</a>

JSFiddle Скачать

...