Отправка Zip-файла с сервера в браузер клиента с помощью Express и Archiver

Я новичок в Node и пытаюсь выяснить, как создать zip-файл на сервере, затем отправить его клиенту и затем загрузить zip-файл в браузер пользователя. Я использую Express Framework, и я использую Archiver для фактического архивирования. Мой серверный код является следующим, который был взят из динамически создавать и передавать zip на клиент

router.get('/image-dl', function (req,res){

    res.writeHead(200, {
        'Content-Type': 'application/zip',
        'Content-disposition': 'attachment; filename=myFile.zip'
    });

    var zip = archiver('zip');

    // Send the file to the page output.
    zip.pipe(res);

    // Create zip with some files. Two dynamic, one static. Put #2 in a sub folder.
    zip.append('Some text to go in file 1.', { name: '1.txt' })
        .append('Some text to go in file 2. I go in a folder!', { name: 'somefolder/2.txt' })
        .finalize();
});

Таким образом, архивирование двух текстовых файлов и возвращение результата. На стороне клиента я использую следующую функцию в сервисе для фактического вызова этой конечной точки

downloadZip(){

    const headers = new Headers({'Content-Type': 'application/json'});

    const token = localStorage.getItem('token')
        ? '?token=' + localStorage.getItem('token')
        : '';

    return this.http.get(this.endPoint + '/job/image-dl' + token, {headers: headers})
        .map((response: Response) => {
            const result = response;
            return result;
        })
        .catch((error: Response) => {
            this.errorService.handleError(error.json());
            return Observable.throw(error.json());
        });

}

а потом у меня есть другая функция, которая вызывает downloadZip() и фактически загружает zip-файл в локальный браузер пользователя.

testfunc(){
    this.jobService.downloadZip().subscribe(
        (blah:any)=>{    
            var blob = new Blob([blah], {type: "application/zip"});
            FileSaver.saveAs(blob, "helloworld.zip");
        }
    );
}

когда testfunc() называется, zip-файл загружается в браузер пользователя, однако, когда я пытаюсь разархивировать его, он создает файл zip.cpgz, который затем превращается в zip-файл при щелчке в бесконечном цикле, который указывает, что произошло какое-то повреждение. Кто-нибудь может увидеть, где я ошибся здесь?

0 ответов

Другие вопросы по тегам