Распаковка и проверка файла в DOM / клиентской части - PullRequest
0 голосов
/ 26 августа 2018

Я надеюсь добавить на угловой сайт 6 функцию, связанную с разархивированием файлов.По сути, пользователи могут загрузить файл.Затем я хотел бы проверить файл, чтобы увидеть, является ли он файлом zip, и, если это так, разархивировать файл и работать с данными в браузере на стороне клиента.Кто-нибудь знает существующий инструмент, который я могу использовать для этого?Или есть предложения, как подойти к этой проблеме?Заранее спасибо.

1 Ответ

0 голосов
/ 26 августа 2018

Вы можете использовать JSZip library

для его установки:

С npm: npm install jszip
С беседкой: bower install Stuk/jszip

Создание Zip измассивы байтов

public downloadAllFiles() {
    console.log("Downloading All Files");
    var fileName = this.defaultDataService.defaultDataBase + "-" + this.selectedYear.path + ".zip";
    var zip = new JSZip();

    var year = zip.folder(this.selectedYear.path);

    for (var i = 0; i < this.selectedTypes.length; i++) {            
        var subDir = year.folder(this.selectedTypes[i].path);
        for (var j = 0; j < this.selectedTypes[i].pdfList.length; j++) {
            subDir.file(this.selectedTypes[i].pdfList[j].name + ".pdf", this.createPdfBlob(this.convertBase64ToBytes(this.selectedTypes[i].pdfList[j].bytes)));
        }
    }

    zip.generateAsync({ type: "blob" })
        .then(function (blob) {
            FileSaver.saveAs(blob, fileName);
        });
}

convertBase64ToBytes(data: string) {
    let byteCharacters = atob(data);
    let byteNumbers = new Array(byteCharacters.length);

    for (var i = 0; i < byteCharacters.length; i++) {
        byteNumbers[i] = byteCharacters.charCodeAt(i);
    }

    let byteArray = new Uint8Array(byteNumbers);
    return byteArray;
}

createPdfBlob(src: any) {
    const byteArrays = [];
    byteArrays.push(src);
    return new Blob(byteArrays, { type: 'application/pdf' });
}

вот статья об этой библиотеке, использующая angularJS: https://onehungrymind.com/zip-parsing-jszip-angular/

этот вопрос stackoverflow может также помочь: Использование jszip с угловым 2

...