我已经建立了一个提供zip文件的GridFS流,如果我在浏览器中输入API url,那么该zip文件就会下载到我的计算机上,这就是我想要的。但是,当我从前端React应用程序发出get请求时,我得到了一个数据对象,并且没有下载效果。我已经可以使用window.location.href进行下载,但是考虑到URL不再有效,我猜测这在生产中将是一个问题。只是希望对此有所了解,我的目标是用户可以单击下载按钮,然后将zip文件发送给用户并开始下载。谢谢!
GRIDFS API ROUTE
router.get("/api/test/stream/:filename", (req, res) => {
res.set({
"Accept-Ranges": "bytes"
});
gfs.files.findOne({ filename: req.params.filename }, (err, file) => {
if (!file || file.length === 0) {
return res.status(404).json({
error: "That File Doesn't Exist"
});
}
if (file.contentType === "application/zip") {
// Read output to browser
const readstream = gfs.createReadStream(file.filename);
readstream.pipe(res);
} else {
res.status(404).json({
error: "This is not an zip file"
});
}
});
});
REACT BUTTON
<a style={{width: '100%', display: 'flex', justifyContent: 'center'}} onClick={() => window.location.href="http://localhost:8080/api/test/stream/47c45dccd515a0f77d1a3ca738d7eecd.zip"}>
<Button onClick={this.closeSampleModal}>
Get My Download
</Button>