Angular 8 - Чтобы экспортировать один или несколько файлов JSON через диалог - PullRequest
0 голосов
/ 29 октября 2019

В приложении, где я могу загружать один или несколько файлов JSON и манипулировать их значениями, довольно сложно экспортировать их обратно в файловую систему;Я хочу иметь возможность выбрать один или несколько файлов в диалоговом окне со списком. Затем можно загрузить их как файл .json с помощью собственного диалогового окна загрузки браузера, не выходя из приложения.

Чтобы придумать «угловой» способ, я сложил функцию в exportService:

export(obj) {
    const exportFile = new File([JSON.stringify(obj, null, 2)], filename, {type: 'application/json'})
}

Я пробовал оба конструктора File() и Blob() и с помощью window.assign() отправляю браузер созданному BLOB-объекту. Это работает так, как должно, так как мне дают чистый JSON-файл, когда браузер отправляет мне его. Однако я не могу автоматически загрузить BLOB-объект после нажатия на кнопку, которая вызывает функцию export(). Я могу выбрать один из следующих методов:

Вариант 1: Использовать FileSaver.js

Для мышления node.js нужно использовать для него модуль и вызватьэто день, хотя я бы предпочел не использовать какие-либо внешние модули.

Вариант второй: создать гиперссылку в DOM и щелкнуть по ней

Для меня это неблагоприятно, так как вы можете мусоритьDOM со скрытыми ссылками, несмотря на возможность их удаления;В целом это кажется «хакерским» подходом, и, судя по другим примерам, над стековым потоком;это то, что делает вышеупомянутая библиотека FileSaver.

Реализация этого заключается в следующем:

const dllink = document.createElement('a');
dllink.href = exportFile;
dllink.download = filename + '.json';
dllink.click();

, но я думаю, что это немного излишне. Наряду с отсутствием надежных средств для гарантии того, что новый элемент может быть уничтожен.

Вариант третий: перейдите к URL-адресу файла с помощью Angular's DOMSanitizer и bypassSecurityTrustUrl

Я бы предположил, что этот метод намеренносоздание уязвимости в другом безопасном приложении, и, как правило, излишняя простота функциональности.

Вариант четвертый: использование заголовка HTTP content-disposition

Мне не удалось найти много информации оэтот новый заголовок все же, несмотря на то, что он, кажется, отступает при отправке веб-браузера приложения / пользователя на пользовательский URL, хотя и с более безопасным подходом?

Могу ли я пропустить какие-либо альтернативные варианты, или какой из них будетлучший подход? Существуют ли другие, желательно безопасные способы экспорта файла как загружаемого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...