下载文本文件并将文本作为字符串分配给变量-Angular 7

时间:2019-06-05 08:45:59

标签: javascript angular

我有一个API响应,该响应包含一个指向云中存储的文本文件的链接。 我想下载文本文件,并将文本用作Angular应用程序中的字符串。
这是我到目前为止所做的(不多)

getTextDetails(resultId: string) {
    this.http.get(TEXT_DETAILS_URL + resultId).subscribe((res: any) => {
        this.saveTextFile(res.textFile);
    });
}


// The data is a link to the text file!!
saveTextFile(data) {
    const blob = new Blob([data], { type: 'text/csv' });
    const url = window.URL.createObjectURL(blob);
}

任何帮助将不胜感激。

[编辑]

感谢您的帮助,我不知道这是如此简单。我现在收到一个小问题:

SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttpRequest.onLoad

2 个答案:

答案 0 :(得分:0)

为了获取文本文件。您可以这样做:

text: string;    

getTextDetails(resultId: string) {
        this.http.get(TEXT_DETAILS_URL + resultId).subscribe((res: any) => {
            //Now get the text from url.
            this.http.get(res.textFile).subscribe(text: any) {
              this.text = text;
            }
        });
    }

现在您可以在html模板中显示此文本。

<p ngIf*="text"> {{ text }} </p>

答案 1 :(得分:0)

据我了解,有两个API调用。第一次API调用将返回文本文件的路径。您使用此路径进行另一个API调用,以获取文件的实际内容。

如果我的理解不正确,请纠正。

如果我的理解是正确的,请尝试一下:

import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { switchMap } from 'rxjs/operators';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
  name = 'Angular';

  constructor(private http: HttpClient) {}

  ngOnInit() {
    this.getFileData()
      .subscribe(response => console.log(response));
  }

  getFileData() {
    return this.http.get('/assets/filePath.json')
      .pipe(
        switchMap((response: any) => this.http.get(response.pathToFile, {
          responseType: 'text'
        }))
      );
  }

}

注意::请理解我使用的是本地托管的JSON文件的响应,该文件再次指向本地托管的文本文件。另外,您还必须将第二个API调用的responseType指定为text


  

这是您推荐的Working Sample StackBlitz