如何在文件中保存Web响应?

时间:2017-10-11 07:29:04

标签: json angular

我试图在文件中保存json Web响应。我能够创建并保存文件,但我无法获取其中的Web响应数据。在文件中只有这个:[object Object]

这是我的组成部分:

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

@Component({
moduleId: module.id,
templateUrl: 'home.component.html',
styleUrls: ['home.component.css']
})

export class HomeComponent implements OnInit {


constructor(private http: HttpClient) {

}

nodes: any;
ngOnInit(): void {
  // Make the HTTP request:
  this.http.get('http://someUrl').subscribe(data => {
    // Read the result field from the JSON response.
    this.nodes = data;
    this.downloadFile(this.nodes);

  });

}

downloadFile(data){
  let blob = new Blob([data], { type: 'text/plain;charset=utf-8;' });
  let dwldLink = document.createElement("a");
  let url = URL.createObjectURL(blob);
  let isSafariBrowser = navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1;
  if (isSafariBrowser) {  //if Safari open in new window to save file with random filename.
  dwldLink.setAttribute("target", "_blank");
  }
  dwldLink.setAttribute("href", url);
  dwldLink.setAttribute("download", "TEST.txt");
  dwldLink.style.visibility = "hidden";
  document.body.appendChild(dwldLink);
  dwldLink.click();
  document.body.removeChild(dwldLink);
 }

}

1 个答案:

答案 0 :(得分:2)

有必要将对象转换为其字符串表示形式。可以采用JSON.stringify

的方法
let blob = new Blob([ JSON.stringify(data) ], { type: 'text/plain;charset=utf-8;' });

这是一个疯狂的猜测,但我希望你的data对象是response。因此,您可能需要在其上调用.json()来检索实际有效负载:

this.http.get('http://someUrl').subscribe(data => {
  // Read the result field from the JSON response.
  this.nodes = data;
  this.downloadFile(this.nodes);
});

由于您使用的是某些HttpClient而非标准Http服务,因此很难说清楚。您显示的文件下载代码与我在of my projects中使用的代码相匹配。

调试提示是否可以在行this.nodes = data.json();上设置断点并在浏览器控制台中执行JSON.stringify(data)?然后使用输出更新您的问题。它将有助于了解您实际上正在处理的对象。