Как экспортировать / импортировать файл JSON из заданного массива DTO в Angular 6 на локальный жесткий диск? - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу добавить функцию экспорта / импорта в мой FrontEnd, написанный на Angular 6.

Мой FrontEnd получает DTO в формате JSON из .NET API. Я планирую сначала получить такую ​​функциональность, как кнопка «Сохранить как», чтобы пользователь мог сохранить массив DTO [] в виде файла JSON на своем локальном жестком диске.
Во-вторых, после него он должен иметь кнопку «Импорт» для загрузки файла JSON с локального жесткого диска в массив DTO [] в FrontEnd.

Компонент A, где я подписываю свой Observable, используя асинхронный канал:

// component.ts
data: Observable<Setting[]>;

ngOnInit() {
  this.data = this.dataService.fetchData();
}

// component.html
<tr *ngFor="let s of data | async">

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

Я только что нашел файлы filesaver.js и streamsaver.js для асинхронных операций ..

Так что мне нужен намек / ссылка / базовый пример или идея в правильном направлении:)

1 Ответ

0 голосов
/ 02 ноября 2018

Общий характер Интернета препятствует доступу приложения к жесткому диску пользователя. У нас есть доступ к локальному хранилищу, которое имеет довольно большие ограничения.

// save
localStorage.setItem('someName', JSON.stringify(someData));
// get
const someData = JSON.parse(localStorage.getItem('someName'));
//clear
localStorage.clear();

Кроме того, вам необходимо обеспечить истинную загрузку, которую пользователь решил сохранить. Вы можете в памяти изменить формат данных и передать его как application/octet-stream, который вы можете даже протестировать, просто предоставив пользователю файл JSON с новым расширением по вашему выбору с типом содержимого application/octet-stream , но это не гарантирует, что браузер не будет использовать интеллектуальную функцию для обнаружения и отображения встроенного JSON.

Мой первый подход заключается в том, может ли это быть сделано с локальным хранилищем, если нет, тогда я заархивирую файл в памяти и просто application/octet-stream файл. Затем, когда пользователь загружает этот файл, я должен убедиться, что файл имеет разумный размер (не взломанный), распаковать и проверить, что это мой формат JSON, а затем продолжить.

...