Я пытаюсь реализовать простую функцию загрузки с помощью Angular 7, но получаю поврежденные файлы.
Файлы (jpg, pdf, zip файлы) размещены в облаке, и я получаюон использует Express Server и следующий код:
var url = getBaseUrl() + '/files/' + filename;
cloudGet(url, getHeaders(req), function (err, file) {
if (err) {
...
} else {
res.setHeader('Content-disposition', 'attachment');
res.setHeader('Content-type', 'application/octet-stream');
res.setHeader('Content-Transfer-Encoding', 'binary');
res.end(file, 'binary');
}
});
Заголовок файла, который я получаю, выглядит хорошо, поэтому я думаю, что эта часть работает.
В Angular у меня естьследующий код: Для службы, которая получает файл, я попробовал следующие решения:
downloadResource(path: string) {
return this.httpClient.get(path, {responseType: 'blob'});
}
, и я также попробовал это решение:
downloadResource2(path: string): Observable<Blob> {
return this.httpClient.get<Blob>(path,
{ headers: new HttpHeaders({
'accept': 'application/octet-stream',
'content-type': 'application/json'}),
responseType: 'blob' as 'json'
});
}
В моем компоненте у меня есть следующий код:
downloadFile(filename: string) {
const downloadUrl = this.apiUrl + '&' + 'filename=' + filename;
this.apiService.downloadResource(downloadUrl).subscribe(data => {
const blob = new Blob([data], {type: 'application/octet-stream'});
const downloadURL = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = downloadURL;
link.download = filename;
link.click();
});
}
Это загружает файлы в мою папку загрузки, но все файлы повреждены (кроме файлов .json).PDF открывается, но он пуст.Я что-то упустил?