我有一个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
答案 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。