Angular和Nodejs基本文件下载

时间:2019-06-26 10:21:24

标签: node.js angular

请问有人给我看一个使用Node和Angular下载用户基本文件的示例。我这样理解,但这不起作用:

Nodejs:

// Does it matter that it is a post and not a get?
app.post('/some-api', someData, (request, response) => {
    response.download('file/path/mytext.txt');
});

Angular 2 +:

this.httpclient.post<any>('.../some-api', {...data...}).subscribe(response => {
  console.log(response);
  // This throws an error, but even if it doesn't,
  // how do I download the Nodejs `response.download(...) ?`
});

这里有可能的答案,但是它们太复杂了,有人可以给我一个超级基本的例子(基本上是我在这里的内容,但是是可行的版本)。请最简单的解决方案。

How do I download a file with Angular2

Angular download node.js response.sendFile

1 个答案:

答案 0 :(得分:1)

你去..

Node.js服务器:

const express = require("express");
const router = express.Router();

router.post("/experiment/resultML/downloadReport",downloadReport);

const downloadReport = function(req, res) {
  res.sendFile(req.body.filename);
};

组件角度:

  import { saveAs } from "file-saver"
  download() {
    let filename = "/Path/to/your/report.pdf";
    this.api.downloadReport(filename).subscribe(
      data => {
        saveAs(data, filename);
      },
      err => {
        alert("Problem while downloading the file.");
        console.error(err);
      }
    );
  }

服务角度:

  public downloadReport(file): Observable<any> {
    // Create url
    let url = `${baseUrl}${"/experiment/resultML/downloadReport"}`;
    var body = { filename: file };

    return this.http.post(url, body, {
      responseType: "blob",
      headers: new HttpHeaders().append("Content-Type", "application/json")
    });
  }