我在ASP.NET WebAPI的MemoryStream中有一个.xslx文件。我需要将它发送到JavaScript前端(Angular4),我将让用户使用 file-saver 包保存它。
我试过像这样返回一个MemoryStream实例
MemoryStream memoryStream = new MemoryStream();
SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(memoryStream, SpreadsheetDocumentType.Workbook);
spreadsheet.AddWorkbookPart();
spreadsheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook();
spreadsheet.WorkbookPart.Workbook.Append(new BookViews(new WorkbookView()));
WorksheetPart newWorksheetPart = spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
Sheet sheet = new Sheet() { Id = spreadsheet.WorkbookPart.GetIdOfPart(newWorksheetPart), SheetId = worksheetNumber, Name = "Random Sheet Name" };
sheets.Append(sheet);
spreadsheet.WorkbookPart.Workbook.Save();
return new JsonResult()
{
Data = memoryStream,
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
file-saver 提供了一种从浏览器保存文件的方法: saveAs()。它期望Blob()对象作为第一个参数。所以我试过了:
saveAs(new Blob([data.Data], {type: 'application/octet-stream'}), "Report.xlsx");
这确实保存了文件,但是当我尝试打开它时,我收到以下消息:
Excel无法打开“Report.xslx”文件,因为文件格式或文件扩展名无效。
该文件在打开时显示为空。
我做错了什么?
感谢。