通过 Axios 从 Express.js 服务器下载 XLSX 不起作用

发布于 2025-01-17 02:34:14 字数 1000 浏览 0 评论 0原文

服务器:

return res.download(filepath);

客户端:

function provideDownload(filename, data) {
  const linkElement = document.createElement('a');
  linkElement.setAttribute('href', data);
  linkElement.setAttribute('download', filename);
  document.body.appendChild(linkElement);
  linkElement.click();
  linkElement.remove();
}

function provideBlobDownload(filename, data) {
  provideDownload(
    filename,
    window.URL.createObjectURL(new Blob([data]))
  );
}

axios.post('/export', {
  entity, fileformat, locale: props.locale,
}).then((res) => {
  provideBlobDownload(filename, res.data);
});

问题:

无法打开下载的 xlsx 文件。消息:文件可能已损坏。

浏览器控制台中的 API 响应如下所示:

UEsDBAoAAAAAAPC1eVTWknwRWgEAAFoBAAARAAAAZG9jU....

我已经阅读了相关帖子,包括这篇文章 如何将 .xlsx 数据保存为 blob 文件,但我无法解决它。

我想在不使用像 exceljs 这样的额外包的情况下解决它

Server:

return res.download(filepath);

Client:

function provideDownload(filename, data) {
  const linkElement = document.createElement('a');
  linkElement.setAttribute('href', data);
  linkElement.setAttribute('download', filename);
  document.body.appendChild(linkElement);
  linkElement.click();
  linkElement.remove();
}

function provideBlobDownload(filename, data) {
  provideDownload(
    filename,
    window.URL.createObjectURL(new Blob([data]))
  );
}

axios.post('/export', {
  entity, fileformat, locale: props.locale,
}).then((res) => {
  provideBlobDownload(filename, res.data);
});

Problem:

Can't open downloaded xlsx file. Message: File might be corrupted.

API response in browser console looks like:

UEsDBAoAAAAAAPC1eVTWknwRWgEAAFoBAAARAAAAZG9jU....

I have already read through related posts including this one How to save .xlsx data to file as a blob but I couldn't solve it.

I'd like to solve it without using an additional package like exceljs

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生来就爱笑 2025-01-24 02:34:14

尝试添加 responseType:'blob' 来请求配置选项:

axios.post('/export', {
    entity,
    fileformat,
    locale: props.locale
}, {
    responseType: 'blob'
})
.then((res) => {
    provideBlobDownload(filename, res.data);
});

try adding responseType:'blob' to request config option:

axios.post('/export', {
    entity,
    fileformat,
    locale: props.locale
}, {
    responseType: 'blob'
})
.then((res) => {
    provideBlobDownload(filename, res.data);
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文