#node.js #vue.js #axios #adm-zip
Вопрос:
Обычно «res.статус(200).отправить(данные)» я возвращался для отправки данных
Я использовал adm-молнию и achiver.
узлы
const loadReasearchReport = async (req, res) => {
try {
const resultId = req.query.id;
const reportType = req.query.type;
const result = await resultHeaderRepo.findById(req.query.id);
if (!result) {
console.log(`Not Registered On Result DataBase :${reportType} ${resultId}`)
}
const filePath = result.path;
const reportData = await reportGenerator.generateMicrobiomeReportData(filePath, TEMP_FOLDER, reportType);
let create = await microbiomeReprter.createReportPDFKit(reportData, reportType);
let reportName = reportType.replaceAll(' ', '_');
const fileName = reportName '_' result.resultNo '.zip';
//(admZip)
let admZip = require('adm-zip');
let zip = new admZip();
// add local file
zip.addLocalFolder(reportData.workSpace);
let zipFileContents = zip.toBuffer();
const fileType = 'application/zip';
res.writeHead(200, {
'Content-Disposition': `attachment; filename="${fileName}"`,
'Content-Type': fileType,
})
return res.end(zipFileContents)
// return res.status(200).send(reportType);
} catch (error) {
console.log(error)
}
}
вуэйс
let params = [];
params = {
"id": this.resultId,
"type": this.reportType,
};
let request = {params : params};
await this.$axios.get(this.$apiHost "/results/research", request,{
responseType: 'blob',
headers:{
'Content-Type': 'application/json; application/octet-stream'
},
}).then((response) => {
const url = window.URL.createObjectURL(new Blob([response.data]),{
type:'application/zip'
});
console.log(url)
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.zip'); //or any other extension
document.body.appendChild(link);
link.click();
link.remove();
return false;
});
«ReportData.workSpace» — это папка, хранящаяся локально.
Zip-файл будет загружен, но при открытии будет указано, что он поврежден
I’m stuck on this problem
can you help me?