使用 NodeJS (Express) 如何将文件发送到已从 REST 调用中获取的浏览器
Using NodeJS (Express) how can I send a file to the browser that has been fetched from a REST call
我在 node express 应用程序中使用以下代码来获取二进制文件 (PDF) 并将其提供给浏览器。但是,它不起作用!使用下面的代码,我似乎在浏览器中看到了 PDF 的二进制内容window,例如
%PDF-1.3 %���� 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <> endobj 4 0 obj <> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R] endobj 6 0 obj <>stream x�+��| endstream endobj 7 0 obj <>stream x�+T0�4�3�P0B.....
其余调用将 PDF 作为 application/octet-stream
发送。此外,正确下载 PDF 的 React 应用程序正在使用相同的 REST 端点(因此可以安全地假设 REST 调用正常)。关于如何修复代码的任何想法?
router.get('/processed/:filename', async (req, res) => {
const { filename } = req.params
console.log(`Fetching file${filename}`)
const file = await axios.get(`http://localhost:8080/files/processed?filename=${filename}.pdf`, {
headers: { Authorization: req.session.token },
})
res.send(file.data)
})
经过多次试验和错误后,这有效..所以我将 responseType
标记为 stream
然后将数据通过管道传输到响应
const { filename } = req.params
console.log(`Fetching file${filename}`)
const file = await axios.get(`http://localhost:8080/files/processed?filename=${filename}.pdf`, {
headers: { Authorization: req.session.token },
responseType: 'stream',
})
file.data.pipe(res)
我在 node express 应用程序中使用以下代码来获取二进制文件 (PDF) 并将其提供给浏览器。但是,它不起作用!使用下面的代码,我似乎在浏览器中看到了 PDF 的二进制内容window,例如
%PDF-1.3 %���� 1 0 obj <> endobj 2 0 obj <> endobj 3 0 obj <> endobj 4 0 obj <> endobj 5 0 obj [ 6 0 R 7 0 R 8 0 R] endobj 6 0 obj <>stream x�+��| endstream endobj 7 0 obj <>stream x�+T0�4�3�P0B.....
其余调用将 PDF 作为 application/octet-stream
发送。此外,正确下载 PDF 的 React 应用程序正在使用相同的 REST 端点(因此可以安全地假设 REST 调用正常)。关于如何修复代码的任何想法?
router.get('/processed/:filename', async (req, res) => {
const { filename } = req.params
console.log(`Fetching file${filename}`)
const file = await axios.get(`http://localhost:8080/files/processed?filename=${filename}.pdf`, {
headers: { Authorization: req.session.token },
})
res.send(file.data)
})
经过多次试验和错误后,这有效..所以我将 responseType
标记为 stream
然后将数据通过管道传输到响应
const { filename } = req.params
console.log(`Fetching file${filename}`)
const file = await axios.get(`http://localhost:8080/files/processed?filename=${filename}.pdf`, {
headers: { Authorization: req.session.token },
responseType: 'stream',
})
file.data.pipe(res)