Witam,
tworzę API, które ma tworzyć wiele Bufferów plików, zapisywać je w .zip i wysyłać na frontend w celu ich pobrania.
Jak na razie udało mi się napisać coś takiego:
const generateResults = async (req, res) => {
const template = req.file.buffer;
const data = JSON.parse(req.body.data);
const suffix = req.body.suffix;
const fileName = req.body.fileName;
const zip = new JSZip();
for (let i = 0; i < data.length; i++) {
const doc = await handler.process(template, data[i]);
zip.file(`${fileName} ${data[i][suffix]}`, doc);
}
zip.generateAsync({type: 'nodebuffer'}).then(function (content) {
res.setHeader('Content-disposition', 'attachment; filename=plik.zip');
res.setHeader('Content-Type', 'application/zip');
res.write(content, function (err) {
res.end();
});
});
};
Jednak zamiast od razu pobierać pliku, jest wysyłana odpowiedź:
{
"data": "PK\u0003\u0004\n\u0000\u0000\u0000\u0000\u0000\u0019s�VH�]\u0010?+\u0000\u000...,
"status": 200,
"statusText": "OK",
"headers": {
"content-type": "application/zip"
},
"config": {
"transitional": {
"silentJSONParsing": true,
"forcedJSONParsing": true,
"clarifyTimeoutError": false
},
"adapter": [
"xhr",
"http"
],
"transformRequest": [
null
],
"transformResponse": [
null
],
"timeout": 0,
"xsrfCookieName": "XSRF-TOKEN",
"xsrfHeaderName": "X-XSRF-TOKEN",
"maxContentLength": -1,
"maxBodyLength": -1,
"env": {},
"headers": {
"Accept": "application/json, text/plain, */*"
},
"method": "post",
"url": "http://localhost:3001/generateResults",
"data": {}
},
"request": {}
}
Dodam jeszcze moje wywołanie Axios, może będzie potrzebne:
try {
const response = await axios.post('http://localhost:3001/generateResults', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
});
console.log(response);
return response;
} catch (error) {
console.log(error);
}
Z tego co wiem, dodanie nagłówka 'attachment; filename=plik.zip'
powinno automatycznie pobrać plik, a to się nie dzieje