c# - 使用文件保护程序保存后无法打开excel文件
问题描述
在后端,我生成一个 Excel 文件并将其保存在服务器上。这进展顺利。但用户必须有机会将 Excel 工作表保存在本地计算机上。这就是我在前端使用 FileSaver 的原因。
当前端获取字节数组时,它会保存一个文件。但是当我在 Excel 中打开此文件时,我收到格式/扩展名无效的消息。我究竟做错了什么?
后端:
[HttpGet]
public async Task<IActionResult> GetExcelAsync(){
// do something in service layer
var result = File.ReadAllBytes(excelFile);
return Ok(result);
}
前端:
服务.ts
public getExcelSheet(): Observable<any>{
let options = {
headers: new HttpHeaders({
'Content-Type': 'application/json'}),
responseType: 'blob' as 'json'};
return this.httpClient.get<any>(this.url, options);
}
组件.ts
public getSheet(){
this.service.getExcelSheet().subscribe( response =>{
const blob = new Blob([response],
{type: 'application/vnd.ms-excel'});
FileSaver.saveAs(blob, 'result.xlsx');})
}
解决方案
我看到您找到了解决方案,但我会在此处添加我的两个词,因为它们可能会有所帮助。
在 Angular 中处理 Blob 时,您可以通过删除通用 getter 来简化一切,如下所示:
public getExcelSheet() {
return this.httpClient.get(this.url, { responseType: 'blob' });
}
现在,Angular 知道并返回一个Observable<blob>
.
推荐阅读
- html - 我的内容
在移动设备上缩小
- css - What's the difference between .picture{} and .picture img{}?
- python - 如何在 RedHat 上安装 tkinter?
- linux - Raspberry Pi 配置 - 从单独的文件中读取参数
- django - 类通用 DeleteView 不适用于与模型相关的模型
- git - 仅当存在拖车时才在拖车和 %s 之间添加空格
- catboost - catboost 特征图中的“不同特征值的预测”曲线是什么?
- javascript - 为什么数字属性访问速度要慢 100 倍?
- python - FPDF - 如何在 Python 中逐行对齐
- python - 未能在发现服务中执行刷新元数据课程