javascript - 下载文件“发送带有下载名称的文件”
问题描述
我有一个 Angular 6 应用程序,我想从我的 .NET Core API 下载生成的 PDF。
每个调用似乎都是有效的,但我不确定如何下载/打开文件。
Microsoft.AspNetCore.Mvc.Infrastructure.FileContentResultExecutor:信息:执行 Microsoft.AspNetCore.Mvc.FileContentResult,发送下载名称为“test.pdf”的文件...
Reporting
API :
public IActionResult CreateReport()
{
XtraReport report = m_ReportingManager.GetReport();
MemoryStream ms = new MemoryStream();
report.ExportToPdf(ms);
HttpContext.Response.ContentType = "application/pdf";
FileContentResult result = new FileContentResult(ms.GetBuffer(), "application/pdf")
{
FileDownloadName = "test.pdf"
};
return result;
}
在我的 Angular 组件中,我有 2 次调用服务(1 次来自 SO,1 次来自我自己)
public getReport1() {
this._reportViewerService.getReport()
.subscribe(blob => {
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "test.pdf";
link.click();
}, error => { console.log(error) });
}
public getReport2() {
this._reportViewerService.getReport().subscribe(
(result: any) => window.open("http://localhost:44302/Reporting/test.pdf", "_blank"),
(error: any) => this._loggerService.logError(error),
() => this.loading = false
);
}
我的服务看起来像这样:
public getReport(definitionKey: string, reportParameters: ReportParameter[]): Observable<any> {
const parameters = {
key: definitionKey,
reportParameters: reportParameters
};
return this._http.post<any>(this.baseUrl + 'CreateReport', parameters);
}
解决方案
您可以使用文件保护程序包来处理文件下载。
https://www.npmjs.com/package/file-saver
我在我的应用程序中这样做了,希望你能适应你的应用程序:
downloadFile(data: Response){
let blob = new Blob([data], { type: 'application/pdf' });
let url= window.URL.createObjectURL(blob);
console.log(url);
window.open(url);
}
getPdf() {
const options: {
headers?: HttpHeaders,
observe?: 'body',
params?: HttpParams,
reportProgress?: boolean,
responseType: 'blob',
withCredentials?: boolean
} = {
headers: null,
params: null,
responseType: 'blob'
};
this.http.get(`your api endpoint`, options)
.subscribe(blob => {
saveAs(blob, 'file.pdf');
});
}
推荐阅读
- c# - 获取数据时图像旋转 [Xamrin forms] 使用新错误消息编辑仅创建视图层次结构的原始线程
- python - 使用 Joins 获取特定的数据集
- javascript - 使用 PHP cURL 登录网站
- unity3d - Cinemachine 现在在地图更改后可以正常工作
- python - Openpyxl 正在把我的整数变成浮点数
- java - Java执行多个线程并等待完成
- generics - 如何创建一个接受任何有符号或无符号整数并将其转换为 u8 的通用函数?
- csv - Silverstripe silvershop 批量 csv 上传
- svelte - 如何使用美元符号语法访问嵌套存储
- google-chrome - 如何获得 chrome 实验性暗模式 css?