我正在构建服务器,并且我希望允许下载文件。 带有角度的FrontEnd-我在那里有数据库服务。
带有NodeJS + express的后端。
我在BE路由器和控制器上工作,我写了一些有效的代码-但并非在所有情况下都如此。
如果我在浏览器中输入要下载的URL,请说“ http://localhost:3000/api/files/download/somefile” 一切正常,文件下载到我的PC。
但是,如果我在我的FE上设置了一个函数来调用该下载函数(例如,单击某些按钮后)-它不起作用,并且我收到错误消息:“在解析{{3}时,Http失败}“
我在app.js中写的服务器标头:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use((req, res, next) => {
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
res.setHeader(
"Access-Control-Allow-Methods",
"GET, PUT, POST, PATCH, DELETE, OPTIONS"
);
next();
});
我在控制器上的功能:
exports.downloadFile = (req, res, next) => {
var data = req.params.file;
fs.writeFile("temp.txt", data, (err) => {
if (err){
console.log("error: "+err);
}
console.log("Successfully Written to File!");
var filePath = "temp.txt";
var fileName = "downloaded_file.txt";
res.download(filePath, fileName, (err) => {
console.log("download error: "+err)
});
});
我在数据库服务处的呼叫
downloadExp(file: string) {
this.http.get("http://localhost:3000/api/files/download" + file)
}
我做错了什么?单击按钮后,如何从前端启用下载?
答案 0 :(得分:0)
我在前端使用FileSaver下载文件。 我知道仅链接的回答不太好,但是我自己的代码与自述文件中的示例基本相同。 https://github.com/eligrey/FileSaver.js/