Не удается скачать файл с помощью Axios

Пишу проект в котором должна быть функциональность скачивания файлов, пытаюсь скачать файл с сервера (NodeJS) с помощью Axios:

async download(id) {
    const query = Array.isArray(id) ? id.join('~') : id
    
    try {
        const res = await axios.get(`/api/files/download?files=${query}`, { responseType: 'blob' }) 
        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]))

        const fileName = res.headers['x-file-name']

        const link = document.createElement('a')
        link.href = downloadUrl
        link.download = decodeURI(fileName)
        document.body.appendChild(link)
        link.click()
        link.remove()
    } catch(e) {
        console.log(e.message)
    }
}

Но с файлами, которые больше определенного размера, возникает ошибка: введите сюда описание изображения При этом, если я пытаюсь скачать один файл, на стороне сервере запрос выглядит как успешный. А когда пытаюсь скачать несколько (сервер возвращает их архивом), то возникает ошибка на стороне сервера: Error: Request aborted at onaborted (/home/user/Projects/MERN-test-storage/server/node_modules/express/lib/response.js:1025:15) at Immediate._onImmediate (/home/user/Projects/MERN-test-storage/server/node_modules/express/lib/response.js:1067:9) at processImmediate (internal/timers.js:464:21) { code: 'ECONNABORTED' }

Ошибка в консоли при скачивании нескольких файлов: введите сюда описание изображения Обработчик запроса на сервере:

async download(req, res)  {
    if(!req.query.files) return res.status(400).send('empty query')

    try {
        const ids = req.query.files.split('~')
        const files = await File.find({_id: { $in: ids }}, {name: 1, _id: 0})
        const fileNames = files.map(f => f.name)

        const paths = fileNames.map(name => path.resolve(path.resolve(), 'uploads', name))

        paths.forEach(p => { if(!fs.existsSync(p)) throw new Error('file not found') })

        if(paths.length === 1) {
            const fileName = encodeURI(fileNames[0])
            res.set('x-file-name', fileName)
            res.download(paths[0])
        } else {
            const archiveName = `Archive-${Date.now()}.zip`
            const archivePath = `${path.resolve('uploads')}/${archiveName}`
            const output = fs.createWriteStream(archivePath)
            const archive = archiver('zip', {
                zlib: { level: 1 }
            })
            
            archive.pipe(output)

            paths.forEach((p, idx) => {
                archive.append(fs.createReadStream(p), { name: fileNames[idx] })
            })
            
            archive.finalize()

            output.on('close', () => {
                res.set('x-file-name', archiveName)
                res.download(archivePath, (e) => {
                    if(e) console.log('download error', e)
                    fs.unlink(archivePath, (e) => e && console.log(e))
                })
            })
        }
    } catch(e) {
        console.log(e.message)
        return res.status(404).json('file not found')
    }
}

Ответы (0 шт):