首页 > 解决方案 > 我在从 JS 上的 API 下载 xlsx 文件时遇到问题

问题描述

我正在研究 ReactJs。我有一个按钮,可以下载从 API REST 提供的 excel 文件。问题是我从响应中读取了所有内容,然后将所有这些信息下载到一个字符串上。

但是我一直在尝试所有不同的东西,而且我总是遇到同样的问题,当我尝试在 Excel 中打开文件时,它显示一条消息说文件已损坏。这是我的代码:

export const getFilesFromApi = (path, callBack, contentType) => apiFileCalls({ path, method: 'GET', callBack, contentType: contentType || 'text/plain' });

export const apiFileCalls = ({ path, callBack, data, method, contentType, attachFiles = [], additionalHeaders = [] }) => {
    debugger;
    new Promise(() => {
        const request = superagent(method, path);
        request.set('Access-Control-Allow-Origin', '*');
        if (contentType) {
            request.set('Content-Type', contentType);
        }
        const accessToken = getCookie_accessToken();
        if (accessToken) {
            request.set('Authorization', `Bearer ${accessToken}`);
        }
        if (data) {
            request.send(data);
        }

        additionalHeaders.forEach((header) => request.set(header.name, header.value));
        attachFiles.forEach((file) => request.attach(file.fieldName, file.file));

        request.query().then((res) => callBack(res.text)).catch((error) => {
            if (error.status !== 401) {
                callBack(true, error.response);
            }
        });
    });
};
export const downloadFile = (content, fileName) => {
    debugger;
    const urlrtMP = window.URL.createObjectURL(new Blob([ content ]));
    const link = document.createElement('a');
    link.href = urlrtMP;
    link.setAttribute('download', fileName);
    link.click();
};

有什么帮助吗?非常感谢

标签: javascriptexcelreactjsrestapi

解决方案


您必须使用 responseType('blob') 来接收 Blob 内容。

参考:https ://visionmedia.github.io/superagent/#binary


推荐阅读