如何使用nodejs将文件下载到本地计算机?

时间:2019-05-01 19:15:01

标签: node.js angular http server

我正在构建服务器,并且我希望允许下载文件。 带有角度的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) 
}

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

1 个答案:

答案 0 :(得分:0)

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