Экспорт файлов на стороне сервера с возможностью выбора места куда сохранять

110
09 февраля 2021, 08:10

Всем привет. Я юзаю Express, Node, React.

У меня на клиенте есть кнопка Export. Я ее нажимаю и отправляю на сервер объект. Затем из этого объекта делаю xml и архивирую их. вот код

const JSZip = require("jszip");    
app.post('/export', function (req, res) {
      var zip = new JSZip();
      zip.file("file1.xml", convert.json2xml(req.body.obj1, { compact: true, ignoreComment: true, spaces: 4 }));
      zip.file("file2.xml", convert.json2xml(req.body.obj2, { compact: true, ignoreComment: true, spaces: 4 }));
      zip.generateNodeStream({ 
        type: 'nodebuffer', 
        streamFiles: true, 
        compression: "DEFLATE",
        compressionOptions: {
            level: 9
        } 
      })
      .pipe(fs.createWriteStream('xdd.zip')) // на этой стадии на сервере создается валидный архив. все работает хорошо. но мне надо сохранить его не на сервере, а в выбранном мной в браузере месте.
      .on('finish', function (result) {  // result == undefined
          res.download(path.join(__dirname, 'xd.sflow'))
          // res.end(file);
      });  
    });

на стороне клиента

import { saveAs } from 'file-saver';
return axios.post(`${apiUrl}` + 'export', data)
    .then(response => {
        var blob = new Blob([response.data], {type: "text/plain;charset=utf-8"});
        saveAs(blob, "test.zip");
        dispatch(exportFlowSuccess(response.data))
})

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

но, файл уже не валидный. он не такой же как сохраненный ранее на сервере.

понятно что я на клиент что-то не то передаю, но что надо передавать, я так и не понимаю

READ ALSO
Записать значения в cookie

Записать значения в cookie

Вообще не понимаю, в чём ошибка, но cookie вроде как остаётся совершенно пустым

83
Не корректно трансформирует точки в d3

Не корректно трансформирует точки в d3

Почему после увеличения уменьшение зума не корректно пересчитаваются координатыЕсли изначально не зумить, то точки масштабируются корректно,...

90
При выборе поисковых подсказок в input не срабатывает функция oninput, onchange

При выборе поисковых подсказок в input не срабатывает функция oninput, onchange

При выборе поисковых подсказок в input не срабатывает функция oninput, onchange

95
Пропадает background на Safari 12

Пропадает background на Safari 12

Ситуация следующая: при тесте сайта на iPhone 6, после загрузки всей страницы фон становится белым, а должен быть градиентПроисходит это через...

101