Mi lado del servidor usando Express JS
const XLSX = require('xlsx'); module.exports = () => { return async (req, res, next) => { try { const data = [['1', '2', '3'],['4', '5', '6']]; const filename = `Testing.xlsx`; const wb = XLSX.utils.book_new(); const ws = XLSX.utils.aoa_to_sheet(data); const merge = [ { s: { r: 0, c: 0 }, e: { r: 0, c: 9 } }, { s: { r: 1, c: 1 }, e: { r: 1, c: 7 } }, { s: { r: 2, c: 1 }, e: { r: 2, c: 7 } }, { s: { r: 2, c: 8 }, e: { r: 3, c: 9 } }, { s: { r: 3, c: 0 }, e: { r: 4, c: 0 } }, { s: { r: 3, c: 1 }, e: { r: 4, c: 1 } } ]; ws['!merges'] = merge; XLSX.utils.book_append_sheet(wb, ws, 'Detail'); const wbBuffer = XLSX.write(wb, { bookType: 'xlsx', type: 'array' }); res.header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8'); res.attachment(filename); return res.status(200).send(wbBuffer); } catch (error) { logger.log('error', 'DownloadSellerFinancialAccounts', { error }); return next(error); } }; };Mientras tanto en el sitio del cliente
export function apiDownloadFinancilJournal() { return axios.get(`${paymentUrlApi.downloadFinancialJournal}`, { responseType: 'blob' }); } apiDownloadFinancilJournal() .then((res) => { const url = window.URL.createObjectURL(new Blob([res.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' })); const link = document.createElement('a'); link.href = url; link.setAttribute('download', `Financial-Journal.xlsx`); document.body.appendChild(link); link.click(); }) .catch((err) => { this.setState({ errorMessage: err.response?.data?.message ?? 'Server Error' }); }); };Mi pregunta es, ¿en qué lado lo hice mal? porque el resultado es un txt en lugar de un archivo xlsx. He probado diferentes tipos de flujo de datos (blob, arrayBuffer, buffer) pero el resultado es aún peor