当服务器返回 gzip 文件时,如何在反应中下载文件?

时间:2021-06-23 18:24:51

标签: reactjs gzip

我想从服务器下载一个 gzip 文件。我有一个返回 gzip 文件的 API。所以我必须从 React 调用该 API 并从客户端下载 gzip 文件。

这是我调用 API 的代码:

const res = await API.get(`${baseUrl}/${advId}/${type}`, {
  params: { campaign_id: id, start_date: startDate, end_date: endDate },
});

const data = res.data;
const url = URL.createObjectURL( new Blob(data));
const link = document.createElement('a');
link.href = url;
link.click();

尝试将来自服务器的响应转换为 Blob。但错误是未处理的拒绝(TypeError):无法构造'Blob':提供的值无法转换为序列。。响应数据应该是一个 gzip 文件。

1 个答案:

答案 0 :(得分:0)

我可以想到两件事你可以尝试:

  • 如果您使用 axios,请确保将 responseType 设置为 arrayBuffer axios.get(`${baseUrl}/${advId}/${type}`, { responseType: 'arraybuffer' })
  • 使用数组创建您的 Blob,例如 new Blob([response.data])