有没有办法从 api 响应中存储本地 pdf 文件?

Is there a way to store locally pdf files from an api response?

我一直在尝试通过 api 响应在本地保存 pdf 文件。这是我到目前为止尝试过的方法。

 const config = {
    headers: {
      Authorization: `Bearer ${token}`,
      responseType: 'blob',
    },
  };

  const response = await axios.get(
    apiURL,
    config,
  );

  fs.writeFile(
    `filename.pdf`,
    response.data,
    (err) => {
      if (err) return console.log(err);
      else console.log('file saved succsefully');
    },
  );

我没有收到任何错误,但它也没有写入文件。

这是我从 response.data

中得到的

Blob 不是 fs.writeFile 的有效 data 类型。

尝试以下操作:

const config = {
  headers: {
    Authorization: `Bearer ${token}`
  },
  responseType: 'blob'
};

const response = await axios.get(
  url,
  config
);

const arrayBuffer = await response.data.arrayBuffer();

const buffer = Buffer.from(arrayBuffer);

const filePath = `./${response.headers['content-disposition'].split('=')[1]}.pdf`;

await fs.writeFile(filePath, buffer).then(() => {
  console.log('file saved succsefully');
}).catch((err) => console.log(err));

responseType 不应该在 headers 配置中。

您还可以使用 responseType: "stream".

将响应作为流写入文件
const config = {
  headers: {
    Authorization: `Bearer ${token}`,
  },
  responseType: 'stream'
};


const response = await axios.get(apiURL, config)

const fileStream = fs.createWriteStream('filename.pdf')

response.data.pipe(fileStream)