我正在构建一个服务器,我想允许下载文件。带角度的前端 - 我在那里有 DB 服务。
使用 NodeJS+express 的后端。
我在 BE 路由器和控制器,我编写了一些有效的代码 - 但并非适用于所有情况。
如果我在浏览器中输入要下载的 URL,请说“ http://localhost:3000/api/files/download/somefile ” 一切正常,文件下载到我的 PC。
但是如果我在我的 FE 上设置一个函数来调用那个下载函数(比如说,在点击某个按钮之后) - 它不起作用,我得到一个错误:“解析http://localhost:3000 时出现 Http failure /api/files/download/some%20file "
我的服务器标头,正如我在 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)
});
});
我在 DB Service 的电话:
downloadExp(file: string) {
this.http.get("http://localhost:3000/api/files/download" + file)
}
我做错了什么?单击按钮后,如何从前端启用下载?
我在前端使用 FileSaver 下载文件。我知道仅链接的答案不太好,但我自己的代码与此处自述文件中的示例基本相同。https://github.com/eligrey/FileSaver.js/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句