首页 > 解决方案 > 如何使用nodejs将文件下载到本地计算机?

问题描述

我正在构建一个服务器,我想允许下载文件。带角度的前端 - 我在那里有数据库服务。

后端使用 NodeJS+express。

我有 BE 路由器和控制器,我编写了一些有效的代码 - 但并非适用于所有情况。

如果我在浏览器中输入要下载的 URL,请说“ http://localhost:3000/api/files/download/somefile ” 一切都按预期工作,并且文件已下载到我的 PC。

但是如果我在我的 FE 上设置一个函数来调用该下载函数(可以说,在单击某个按钮后) - 它不起作用,并且我收到一个错误:“解析http://localhost:3000期间的 Http 失败/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) 
}

我做错了什么?单击按钮后,如何从前端启用下载?

标签: node.jsangularhttpserver

解决方案


我在前端使用 FileSaver 来下载文件。我知道仅链接的答案不太好,但我自己的代码与此处自述文件中的示例基本相同。https://github.com/eligrey/FileSaver.js/


推荐阅读