我正在尝试使用angular 2
和net core 2
作为API下载文件。
我以前看过的每个答案都有很大不同,我似乎无法理解/让他们工作。
无论如何,这就是我得到的服务器,我返回一个文件流
var content = System.IO.File.ReadAllBytes(tempFilename);
var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var fileName = "test.xlsx";
return File(content, contentType, fileName);
流返回正常。现在我的理解是我必须在客户端上创建一个blob?然后阅读并保存blob或什么?
目前,在我的客户端,我有一个get请求返回一个observable。
以下是我的服务组件调用:
this.reportService.generateDispensations(this.config).subscribe(data => {
});
我不确定在实际的http调用中要修改什么,将其转换为blob或somethinng
答案 0 :(得分:0)
快速修复,如果您的文件不需要身份验证,您可以这样做
const url = `${environment.apiUrl}/location/to/download/from`
window.location.href = url;
答案 1 :(得分:0)
假设您在某些文件夹名称(例如“ image”文件夹)中有数据文件 在wwwroot文件夹中。假设您在以下位置具有文件名abc.jpg 图片文件夹。要获取此文件,请将以下代码写入html 组件。
<a href="https://localhost:8438/image/abc.jpg" target="_blank" ><i class="fa fa-download"></i></a>
删除您的基本网址。
或者您可以在component.ts中使用以下方法,fileNameUrl是图像的完整URL。
DownLoadFilesUrl(fileNameUrl: any) {
debugger;
var filename: string[] = fileNameUrl.split('\\');
this.getBlobFile(fileNameUrl).subscribe((data: Blob) => {
debugger;
let item = filename[filename.length - 1];
let checkFileType = item.split('.').pop();
var fileType: any;
if (checkFileType == "txt") {
fileType = "text/plain";
}
if (checkFileType == "pdf") {
fileType = "application/pdf";
}
if (checkFileType == "doc") {
fileType = "application/vnd.ms-word";
}
if (checkFileType == "docx") {
fileType = "application/vnd.ms-word";
}
if (checkFileType == "xls") {
fileType = "application/vnd.ms-excel";
}
if (checkFileType == "xlsx") {
fileType = "application/vnd.ms-excel";
}
if (checkFileType == "png") {
fileType = "image/png";
}
if (checkFileType == "jpg") {
fileType = "image/jpeg";
}
if (checkFileType == "jpeg") {
fileType = "image/jpeg";
}
if (checkFileType == "gif") {
fileType = "image/gif";
}
if (checkFileType == "csv") {
fileType = "text/csv";
}
if (checkFileType == "amr") {
fileType = "AMR-WB";
}
var blob = new Blob([data], { type: fileType })
const blob1: Blob = data;
const fileName1: string = item;
const objectUrl: string = URL.createObjectURL(blob);
const a: HTMLAnchorElement = document.createElement('a') as HTMLAnchorElement;
a.href = objectUrl;
a.download = fileName1;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(objectUrl);
});
}
getBlobFile(imageUrl: string): Observable<Blob> {
return this._http.get(imageUrl, { responseType: 'blob' });
}