У меня есть файл xlsx, сгенерированный из json. я могу сохранить файл на диске с nodejs и открыть его в Excel. Открывается правильно. Код ниже.
import { Request, Response } from "express";
// @ts-ignore
import json2xls from "json2xls";
import fs from "fs";
public async getActionXLS(req: Request, res: Response) {
res.set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
res.header("Content-Disposition", "attachment;filename=actions.xlsx");
const fileContentJSON = {
foo: 'bar',
qux: 'moo',
poo: 123,
stux: new Date()
};
const xlsFileContent = json2xls(fileContentJSON);
fs.writeFileSync('data.xlsx', xlsFileContent, 'binary');
res.status(200).send(xlsFileContent);
}
Но если я отправлю файл в ответ на запрос angular, чем загрузить файл, он будет отображаться как поврежденный при открытии в Excel. Для получения документа вызывается метод get.
getActionXLS(project: Project) {
this.http.get(this.urlCreator.getUrl(
Paths.api.projects.actionsXLS, project.id), { responseType: "blob" }).subscribe(res => {
downloadDocument({ name: `actions.xlsx`, doc: res });
});
}
export function downloadDocument({name, doc}) {
const url = URL.createObjectURL(doc);
const a = document.createElement("a");
document.body.appendChild(a);
a.setAttribute("style", "display: none");
a.href = url;
a.download = name;
a.click();
URL.revokeObjectURL(url);
a.remove();
}
Хотя файл, сохраненный на диске, является правильным и его можно открыть, файл, сохраненный с помощью downloadDocument, поврежден. Какой будет правильный способ передачи файла?