#angular #filesaver.js
Вопрос:
У меня есть конечная точка, которая возвращает файл .gz, дело в том, что если я получу ответ конечной точки от почтальона, файл загрузится, и я смогу его успешно извлечь. Но когда я пытаюсь загрузить его нажатием кнопки даже в своем приложении angular, я не могу извлечь файл. Загрузка работает, а не извлечение. Вот мой код:
this.submissionService.getMatchLog(downloadUrl).subscribe(data => {
const blob = new Blob([data], {type: 'application/gzip' });
saveAs(blob, `buildlog.gz`);
this.loadingMatchLogFile = false;
});
И вот моя услуга:
public getMatchLog = (URL: string): Observable<string> => {
const headers = new HttpHeaders().set('Content-Type', 'text/plain; charset=utf-8');
return this.http
.get<string>(URL, {headers: headers, responseType: 'text' as 'json'})
.pipe(
switchMap((downloadUrl: string) => {
const headersForGet = new HttpHeaders()
.set('Content-Disposition', 'attachment; filename="log.txt"')
.set('Content-Type', 'text/plain; charset=utf-8');
return this.http.get<string>(downloadUrl, {headers: headersForGet, responseType: 'text' as 'json'});
}
),
catchError(err => {
console.log(err);
return EMPTY;
})
);
}
Комментарии:
1. Я столкнулся с чем-то подобным с другим техническим стеком. Попробуйте сохранить его в виде txt-файла, чтобы увидеть, что вы действительно получаете обратно (размер также может указывать на проблему). Моя проблема заключалась в том, что я получил перенаправление или несанкционированный ответ, а не фактический файл, который я ожидал. (таким образом, это был не zip-файл-это был html-текст, сохраненный с расширением zip)