Как nodejs сжимает папки в zip-файлы и отправляет их клиентам vue

#node.js #vue.js #axios #adm-zip

Вопрос:

Обычно «res.статус(200).отправить(данные)» я возвращался для отправки данных

Я использовал adm-молнию и achiver.

узлы

 const loadReasearchReport = async (req, res) => {
try {
    const resultId = req.query.id;
    const reportType = req.query.type;

    const result = await resultHeaderRepo.findById(req.query.id);

    if (!result) {
        console.log(`Not Registered On Result DataBase :${reportType} ${resultId}`)
    }
    const filePath = result.path;
    
    const reportData = await reportGenerator.generateMicrobiomeReportData(filePath, TEMP_FOLDER, reportType);
    let create = await microbiomeReprter.createReportPDFKit(reportData, reportType);        
 
    
    let reportName = reportType.replaceAll(' ', '_');
    const fileName = reportName   '_'   result.resultNo   '.zip';
    //(admZip)
    let admZip = require('adm-zip');
    let zip = new admZip();
    // add local file
    zip.addLocalFolder(reportData.workSpace);

    let zipFileContents = zip.toBuffer();

    const fileType = 'application/zip';
    res.writeHead(200, {
        'Content-Disposition': `attachment; filename="${fileName}"`,
        'Content-Type': fileType,
    })
    
    return res.end(zipFileContents)
  
    // return res.status(200).send(reportType);

} catch (error) {
    console.log(error)
}
 

}

вуэйс

             let params = [];
            params = {
                "id": this.resultId,
                "type": this.reportType,
            };
            let request = {params : params};
            await this.$axios.get(this.$apiHost   "/results/research", request,{
                responseType: 'blob',
                headers:{
                        'Content-Type': 'application/json; application/octet-stream'
                },
            }).then((response) => {
                const url = window.URL.createObjectURL(new Blob([response.data]),{
                    type:'application/zip'
                });
                console.log(url)
                const link = document.createElement('a');
                link.href = url;
                link.setAttribute('download', 'file.zip'); //or any other extension
                document.body.appendChild(link);
                link.click();
                link.remove();
                return false;

            });
 

«ReportData.workSpace» — это папка, хранящаяся локально.

Zip-файл будет загружен, но при открытии будет указано, что он поврежден

I’m stuck on this problem

can you help me?