ASP.NET MVC EPPlus Загрузить файл Excel

Итак, я использую причудливую библиотеку EPPlus для записи файла Excel и вывода его пользователю для загрузки. Для следующего метода я просто использую некоторые тестовые данные, чтобы свести к минимуму код, тогда я добавлю код, который я использую для подключения к базе данных позже. Теперь я могу полностью загрузить файл, но когда я открываю файл, Excel жалуется, что он не является допустимым файлом и может быть поврежден. Когда я иду посмотреть файл, он говорит, что он 0KB большой. Итак, мой вопрос: где я иду не так? Я предполагаю, что это с MemoryStream. Не делали много работы с потоками, поэтому я не совсем уверен, что использовать здесь. Любая помощь будет оценена!

[Authorize]
public ActionResult Download_PERS936AB()
{
    ExcelPackage pck = new ExcelPackage();
    var ws = pck.Workbook.Worksheets.Add("Sample1");

    ws.Cells["A1"].Value = "Sample 1";
    ws.Cells["A1"].Style.Font.Bold = true;
    var shape = ws.Drawings.AddShape("Shape1", eShapeStyle.Rect);
    shape.SetPosition(50, 200);
    shape.SetSize(200, 100);
    shape.Text = "Sample 1 text text text";

    var memorystream = new MemoryStream();
    pck.SaveAs(memorystream);
    return new FileStreamResult(memorystream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "PERS936AB.xlsx" };
}

Ответы

Ответ 1

Вот что я использую - я использовал это несколько месяцев и не имел проблемы:

    public ActionResult ChargeSummaryData(ChargeSummaryRptParams rptParams)
    {
        var fileDownloadName = "sample.xlsx";
        var contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

        var package = CreatePivotTable(rptParams);

        var fileStream = new MemoryStream();
        package.SaveAs(fileStream);
        fileStream.Position = 0;

        var fsr = new FileStreamResult(fileStream, contentType);
        fsr.FileDownloadName = fileDownloadName;

        return fsr;
    }

Одна вещь, которую я заметил сразу с места в карьер, заключается в том, что вы не reset положение вашего файла потока обратно на 0.