Witam,
od kilku godzin borykam się z pewnym problemem. Mianowicie próbuję przesłać plik docx na serwer i tam przy użyciu easy-template-x
podmienić jego dane. Koduję go na base64, a na serwerze odkodowuję na Buffer. Jednak pojawia mi się w konsoli serwera błąd:
MalformedFileError: Malformed file detected. Make sure the file is a valid docx file.
Funkcja, która obsługuje dodanie pliku (React.js)
function handleTemplateUpload(e) {
const file = e.target.files[0];
const reader = new FileReader();
reader.onload = (event) => {
const base64String = btoa(event.target.result);
dispatch(updateTemplate(base64String));
};
reader.readAsBinaryString(file);
}
Funkcja axios
, która wysyła dane na serwer (React.js)
axios
.post('http://localhost:3001/generatePreview', JSON.stringify({template: template, data: xlsxJson}), {
headers: {
'Content-Type': 'application/json',
},
})
.then((response) => {
console.log(response.data);
})
.catch((error) => console.log(error));
I punkt końcowy do zastępywania danych:
const {TemplateHandler} = require('easy-template-x');
const generatePreview = async (req, res) => {
const template = req.body.template;
const data = req.body.data;
const buffer = Buffer.from(template, 'base64').toString();
const handler = new TemplateHandler();
const doc = await handler.process(buffer, data[2]);
res.send(doc);
};
module.exports = generatePreview;
Dokładny komunikat błędu:
MalformedFileError: Malformed file detected. Make sure the file is a valid docx file.
at TemplateHandler.loadDocx (C:\Users\Victor\Desktop\mama\server\node_modules\easy-template-x\dist\cjs\easy-template-x.js:3141:13)
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async TemplateHandler.process (C:\Users\Victor\Desktop\mama\server\node_modules\easy-template-x\dist\cjs\easy-template-x.js:3051:18)
at async generatePreview (C:\Users\Victor\Desktop\mama\server\src\controllers\generatePreview.js:11:14) {
expectedFileType: 'docx'
}
Dokumentacja easy-template-x
: https://www.npmjs.com/package/easy-template-x