Как отправить zip-папку как ответ с сервера nodejs - PullRequest
0 голосов
/ 30 апреля 2020

Я хочу отправить zip-папку, содержащую pdf-файлы, в качестве ответа от сервера node.js.

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

Как только все пути к файлам получены, я хочу добавить все эти файлы в заархивированную папку и отправить ее в основной API, который затем отправить эти папки в интерфейс (встроенный реагирует. js). Я опробовал этот код, но он постоянно выдавал ошибку на почтальоне, и я не мог получить какую-либо папку zip.

//code for checking the database and retrieving the file paths
//checks if the filenames are available in the database and sends filepaths back to the main api.
exports.get_file_paths = async (req, res) => {
try {
//arr holding file names of requested filepaths
let filenames = Array.from(req.body.message);
console.log("filenames :" + filenames);
const zipIt = new AdmZip();

//check database for file availability and sends back filepaths of available files to main api
let objArr = await File.find({ filename: { $in: filenames } });
console.log(objArr);

objArr.forEach((element) => {
  let fetchedpath = element.filepath;
  zipIt.addLocalFile(fetchedpath);

});

const downloadName = `${Date.now()}.zip`;
const data = zip.toBuffer();
res.set("Content-Type", "application/octet-stream");
res.set("Content-Disposition", `attachment; filename=${downloadName}`);
res.set("Content-Length", data.length);
res.send(data);

} catch (err) {
//if error occurs when fetching the database values
res.status(500).send({ error: err });
}
};


//code for getting the zipped folder and sending it to the front-end
//function to retrieve the similar file names from the flask api
exports.msGetSimilarity = async (req, res) => {
const config = {
method: "get",
url: "http://127.0.0.1:5000/api/similarfiles",
headers: {},
data: {
  message: req.body.text,
},
};

try {
//get the similar file names array
let response = await axios(config);

//sends the file name array to the file system api
//and get zipped folder as response that will be in the variable getfilepaths
let getfilepaths = await axios({
  method: "get",
  url: "http://localhost:6000/get_all",
  responseType: "stream",
  headers: {
    Accept: "application/json, text/plain, */*",
    "Content-Type": "application/json;charset=utf-8",
    "User-Agent": "axios/0.19.2",
  },
  data: {
    message: response.body.data,
  },
});

console.log(getfilepaths.data.message);

res.sendFile(getfilepaths);
} catch (e) {
res.status(500).send({
  err: e,
});
}
};
...