Я хочу отправить 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,
});
}
};