使用Axios下载tar文件



我有一个api端点,它给了我一个带有Content-Type: application/x-tar的tar文件,然后使用Express服务于我的前端应用程序。我试着用Axios和responseType: 'blob'获取这个文件,但我无法打开二进制文件而没有错误提示,说这是不支持的格式。下面是我正在尝试的:

// backend
const axiosRes = await axios.get(`${API}/file`,
{ headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/x-tar' }, responseType: 'blob' }
);
res.send({ data: axiosRes.data });
// frontend
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.tar');
document.body.appendChild(link);
link.click();

我怎样才能得到真正的。tar格式的文件并将其发送到前端?

问题1—Axios浏览器只支持responseType: "blob"

如果你的Express应用程序需要检索二进制文件,使用这个

const axiosRes = await axios.get(`${API}/file`, {
headers: { Authorization: `Bearer ${token}` }, // no data, no content-type
responseType: "arraybuffer", // use instead of "blob"
});

问题# 2-您正在响应JSON

使用这个

res.send({ data: axiosRes.data });

将尝试和JSON字符串化二进制文件响应,这根本行不通。相反,只需发送原始响应数据

res.type(axiosRes.headers["content-type"]).send(axiosRes.data);