writeFile используется для записи в файл. В вашем случае вы сохраняете данные в виде строки. Наличие zip-расширения для файла не гарантирует, что оно будет zip-файлом. Вы фактически записываете строку (нечитаемые фрагменты) в файл, следовательно, вы не получаете нечитаемый текстовый файл вместо zip-файла. Попробуйте преобразовать чанки в буфер, это должно работать:
http
.get("BiServer:3009", resp => {
let chunks = [];
resp.on("data", chunk => {
chunks.push(chunk);
});
//Don't use end, close is the last event and you should always cleanup in this
resp.on("close", () => {
fs.writeFile("./filename.zip", Buffer.concat(chunks), err => {
console.log(err ? "Error: " + err : "File saved");
return res.send("file is saved on server");
});
});
})
.on("error", err => {
console.log("Error: " + err.message);
});
Кроме того, он будет занимать много памяти, так как вы загружаете все данные в память перед записью в файл, и если размер файла очень большой, вы столкнется с проблемами, связанными с памятью. Так что вместо сохранения всего файла в памяти. Вы должны попробовать streams , Попробуйте это:
const fs=require("fs");
http
.get("BiServer:3009", resp => {
const fileWriteStream=fs.createWriteStream("fileName.zip");
resp.pipe(fileWriteStream);
resp.on("close", () => {
Console.log("File written successfully.")
});
})
.on("error", err => {
console.log("Error: " + err.message);
});