我在服务器端的文件系统中存储了pdf文档。
当用户单击下载时,我需要让用户下载其中之一。
问题是我知道如何将文件从NodeJS发送到浏览器,但是这里的请求将由ReactJS axios请求发出。因此,当我发送文件时,响应将做出反应。如何将pdf文件发送给用户?是否可以使用前端代码直接访问文件系统?
在NodeJS中执行res.sendFile(file_path)
后,在记录响应时,我在浏览器控制台中得到以下信息
我该如何处理以便使用户下载pdf?
答案 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);
});