Razor-страницы — файл не сохраняется после возврата FileContentResult

#excel #file #razor-pages

Вопрос:

Я пытаюсь сохранить файл Excel на рабочем столе пользователя, но у меня возникли некоторые проблемы. Метод, который я вызываю из AJAX:

 public IActionResult OnPostExportMembersToExcel()
{
    using (var workbook = new XLWorkbook())
    {
        var worksheet = workbook.Worksheets.Add("Test sheet");
        int currentRow = 1;
        worksheet.Cell(currentRow, 1).Value = "First name";
        (...)
        foreach (var member in members)
        {
            currentRow  ;
            worksheet.Cell(currentRow, 1).Value = member.FirstName;
            (...)
        }

        using (var stream = new MemoryStream())
        {
            workbook.SaveAs(stream);
            var content = stream.ToArray();
                    
            return File(content, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Test file.xlsx");
        }
    }
}
 

Все проходит без ошибок, но после возвращения ничего не происходит. Я попытался сохранить его с System.IO.File.WriteAllBytes() помощью, и это сработало, но я не получу текущего пользователя, когда приложение будет опубликовано на сервере.
Что я должен сделать, чтобы «забрать» этот файл после возврата и позволить пользователю загрузить его?

Ответ №1:

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