我正在尝试使用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打开,但为空。 我想念什么吗?
答案 0 :(得分:0)
我解决了将express中的代码更改为以下问题:
var url = getBaseUrl() + '/files/' + filename;
request({
method: "GET",
url: url,
headers: getHeaders(req)
}).pipe(res);