首页 > 解决方案 > 当服务器返回 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。但错误是Unhandled Rejection (TypeError): Failed to construction 'Blob': 提供的值不能转换为序列。. 响应数据应该是一个 gzip 文件。

标签: reactjsgzip

解决方案


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

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

推荐阅读