A
A
Andrey2021-07-30 17:14:02
Express.js
Andrey, 2021-07-30 17:14:02

How to download a zip file from a server?

It is necessary to download the archived file in zip format through the interface.
Server Side Express.js + Node.js

//В пост запросе принимается название файла
router.post("/getDownloadFile", async function (req, res){
 // Далее указываю путь до файла
  const file = `${__dirname}/../files/${req.body.fileName}`; 
 // Устанавливаю заголовок, что это сохранение файла
  res.setHeader('Content-disposition', 'attachment; filename=' + req.body.fileName + '.zip');
 //Отправляю этот файл
  res.download(file);
});


Client side with React

// В запросе передаю название файла file
axios.post(`${config.url}/exchange/getDownloadFile`, {fileName: file}, {headers: {
             'responseType': 'blob'
            }
        }).then(function (response) {
           // Создаю url с полученными данными файла
            const url = window.URL.createObjectURL(
                new Blob([response.data], {type: "application/zip"}),
              );
           // Создаю элемент ссылки
            const link = document.createElement('a');
                link.href = url;
                link.setAttribute('download', file,);
                document.body.appendChild(link);

            // Запускаю клик по ссылке
            link.click();

            // Удаляю ссылку
            link.parentNode.removeChild(link);
          })


The problem is that the file is being downloaded, but when I try to open it, it shows that the format is wrong, and I don’t understand, is the server sending me broken data or react is giving me a broken file, or am I implementing the file download from the server incorrectly?
6104082bc424e718139411.png

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question