将PDF文件从Node.js发送给用户到React.js

时间:2019-06-06 03:47:13

标签: node.js reactjs

我在服务器端的文件系统中存储了pdf文档。

当用户单击下载时,我需要让用户下载其中之一。

问题是我知道如何将文件从NodeJS发送到浏览器,但是这里的请求将由ReactJS axios请求发出。因此,当我发送文件时,响应将做出反应。如何将pdf文件发送给用户?是否可以使用前端代码直接访问文件系统?

在NodeJS中执行res.sendFile(file_path)后,在记录响应时,我在浏览器控制台中得到以下信息

enter image description here

我该如何处理以便使用户下载pdf?

1 个答案:

答案 0 :(得分:2)

您可以使用file-saver下载文件。以下是我用于pdf下载的功能。 (response.data是nodejs作为响应发送回的缓冲区)

import FileSaver from 'file-saver';
...

_onPdfFetched() {
  FileSaver.saveAs(
    new Blob([response.data], { type: 'application/pdf' }),
    `sample.pdf`
  );
}

或者您可以只向用户显示pdf

window.open(response.data, '_blank');

修改

axios调用应如下所示:

axios.get(url, {
  responseType: 'arraybuffer',
  headers: {
      Accept: 'application/pdf',
  },
});

编辑2

nodejs代码应如下所示:

router.post('/api/downloadfile',(req, res, next) => {
  const src = fs.createReadStream('path to sample.pdf');

  res.writeHead(200, {
    'Content-Type': 'application/pdf',
    'Content-Disposition': 'attachment; filename=sample.pdf',
    'Content-Transfer-Encoding': 'Binary'
  });

  src.pipe(res); 
});