Ваш код очень трудно анализировать, но, похоже, что в конечном итоге вы сохраняете файл как большой двоичный объект в таблице базы данных.Вообще говоря, вам потребуется действие, которое извлекает эти данные из базы данных и возвращает их как FileResult
:
public OnDownloadGetAsync(int scheduleId)
{
var schedule = await _context.Set<Schedule>().FindAsync(scheduleId);
if (schedule == null)
return NotFound();
return File(schedule.PublicSchedule, schedule.PublicScheduleType);
}
Этот второй параметр File
имеет тип mime (то есть text/csv
, application/vnd.excel
, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
и т. Д.).Если вы знаете, что это всегда будет один и тот же тип файла, вы можете жестко его закодировать, но в идеале это то, что вы также должны сохранять в своей базе данных (именно поэтому я «создал» свойство PublicScheduleType
, чтобы сохранить его).Вам, очевидно, нужно будет изменить код загрузки, чтобы сохранить тип содержимого загружаемого файла.
Что-то вроде электронной таблицы Excel должно вызывать загрузку независимо от нее, но по умолчанию будет поставляться файл как «встроенный»."или попытайтесь отобразить его в браузере.Если вы хотите всегда принудительно загружать данные, вы можете предоставить третий параметр для File
с именем файла:
return File(schedule.PublicSchedule, schedule.PublicScheduleType, "schedule.xlsx");
После того, как вы настроили это, вы просто ссылаетесь на этот обработчик:
<a asp-page="Index" asp-handler="Download" asp-route-scheduleId="@schedule.Id">Download</a>