【发布时间】:2021-11-04 23:37:53
【问题描述】:
我希望能够将带有 nodejs 的 pdf 文件发送到前端。但是当我这样做时,我得到一个错误,我无法打开文件。这是错误(错误的翻译:加载PDF文档时发生错误):
我认为一切都很好,但仍然没有工作。
这里是nodeJS代码:
routerTrainer.get("/download-training", verifyJWT, async (req, res) => {
const { training_id } = req.headers;
let training = await Training.findOne({
where: { id: training_id },
});
if (training) {
const path = "/home/gonsa02/Disk/Projects/";
const dirname = "uploads/trainings/";
res.download(`${path}${dirname}${training.file_id}`);
}
});
这里是 React 前端代码:
const downloadTraining = async (id) => {
const fileReader = new FileReader();
const JWT = new ClassJWT();
const axiosReq = axios.create();
await JWT.checkJWT();
axiosReq
.get(`${serverPath}/download-training`, {
headers: {
training_id: id,
token: JWT.getToken(),
responseType: "blob",
},
})
.then((res) => {
console.log(res);
fileReader.readAsDataURL(new Blob([res.data]));
})
.catch((err) => console.log(err));
fileReader.addEventListener("loadend", () => {
const blobString = fileReader.result;
const link = document.createElement("a");
link.href = blobString;
link.setAttribute("download", "file.pdf");
document.body.appendChild(link);
link.click();
});
};
不要担心所有有 JWT 的东西,比如 verifyJWT 或 ClassJWT,这是 json Web 令牌的实现,它可以正常工作。
如果有人知道如何解决它,请告诉我。
【问题讨论】:
-
${path}${dirname}${training.file_id}产生的/字符可能比预期的要少。我的第一个怀疑是dirname不以斜线结尾。 -
目录名是正确的,我会写变量以免让任何人感到困惑
-
为什么是
res.download,而不是res.sendFile? -
@DimaParzhitsky 因为我已经尝试过了,它也不起作用