.NET使用EPPlus导出EXCEL的接口中,文件流缺少文件名信息
测试的接口方法如下:
public async Task ExportBusinessPriceAsync(PageCbbjBusinessPriceDetailInput input)
{
ExportBusinessPrice mybPrice = new ExportBusinessPrice();
var bPriceDetailOutputList = (await PageAsync(input)).Items?.Adapt<List>() ?? new();
if (input.SelectKeyList?.Count > 0) bPriceDetailOutputList = bPriceDetailOutputList.Where(x => input.SelectKeyList.Contains(x.Id)).ToList();
mybPrice.cbbjBusinessPriceDetailOutputList= bPriceDetailOutputList;
return ExcelOp.ExportBusinessPrice(mybPrice, \"商务报价方案导出\");
}
测试的ExcelOp业务类如下:
using Magicodes.ExporterAndImporter.Excel;using Magicodes.ExporterAndImporter.Core;using OfficeOpenXml;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace CSHK.Platform.Module.Bus.Application.Baojia.Common{ public class ExcelOp { public static void ReadExcel(string filePath) { } /// /// 导出商务报价 /// /// /// public static IActionResult ExportBusinessPrice(ExportBusinessPrice ExpDto, string fileName) { // 创建一个新的 ExcelPackage 实例 ExcelPackage package = new ExcelPackage(); // 添加一个工作表并命名为 \"Data\" ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(\"Data\"); // 在 A1 单元格写入文本,在 B1 单元格写入数字,并设置格式 worksheet.Cells[\"A1\"].Value = \"Name\"; worksheet.Cells[\"B1\"].Value = \"Age\"; worksheet.Cells[\"A2\"].Value = \"Alice\"; worksheet.Cells[\"B2\"].Value = 30; worksheet.Cells[\"A2\"].Style.Font.Bold = true; // 加粗文本 // 保存到文件系统中的文件 //package.SaveAs(new FileInfo(\"example.xlsx\")); var stream = new MemoryStream(); package.SaveAs(stream); package.Stream.Position = 0; string _filename = $\"{fileName}-{DateTime.Now:yyyy-MM-dd_HHmmss}\"; //File(stream, //\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", //fileName); var myResult= new XlsxFileResult(stream: package.Stream, fileDownloadName: _filename); return myResult; } }}
返回的文件流信息,在前端获取文件名时,得不到文件名。headers文件头信息中,缺少content-disposition = 这一行信息【content-disposition =\'attachment; filename=%e5%95%86%e5%8a%a1%e6%8a%a5%e4%bb%b7%e8%af%a6%e6%83%85%e5%af%bc%e5%87%ba%e8%ae%b0%e5%bd%95-2025-07-22_151543.xlsx\' 】
如下图所示:
找了几个小时原因,一直以为是我使用EPPlus的方法有问题,或者生成 XlsxFileResult 类型返回的时候有问题。最后无意中发现是我声明接口的时候,缺少了API描述属性导致的。[ApiDescriptionSettings(Name = \"ExportBusinessPrice\"), HttpPost, NonUnify]