在对内容进行个性化设置后,我正在使用NodeJs中的以下代码创建excel表
workbook.save(function (ok) {
if (!ok)
workbook.cancel();
else
console.log('Workbook saved successfully');
这会成功保存我服务器端的工作簿。现在我想将它发送给Angular客户端。我尝试使用以下代码发送它:
__parentDir = path.dirname(process.mainModule.filename);
res.sendFile(__parentDir + '/timesheet.xlsx');
当我在浏览器中运行它时,文件下载成功。但是当我在Postman中运行它时,我会得到如下响应:
�~nL_rels/PK�~nL docProps/PK �~nLxl/PK �~nL xl/_rels/PK �~nL xl/theme/PK �~nLxl/worksheets/PK
这是否意味着文件已损坏?如果是这样如何在浏览器中正确下载?如果它没有损坏,那么为什么不在角度代码中下载呢?我试图通过Angular中的以下代码下载它:
downloadType1(record) {
console.log(record._id);
const _this = this;
_this.appService
.downloadTimeSheet(record._id)
.subscribe(data => {
console.log(data['data']);
var urlCreator = window.URL;
if (urlCreator) {
var blob = new Blob([data], { type: 'application/octet-stream' });
var url = urlCreator.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.href = url;
a.download = "download.xlsx";
a.click();
window.URL.revokeObjectURL(url);
}
}),
error => console.log("Error downloading the file."),
() => console.info("OK");
}
我不知道我做错了什么。我必须更改服务器端(节点)或客户端(Angular)上的代码?
答案 0 :(得分:0)
在进行如下所示的get调用之前,您需要设置responseType和http标头:
------------------------- ### -----------------
let getfileheaders = new HttpHeaders().set('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
return this.http.get(this.getappsecdesignfileurl, {responseType: 'blob', headers: getfileheaders});
这很重要: {responseType:'blob',标头:getfileheaders}