Эффективная отправка файлов из ядра asp.net
Я заинтересован в портировании некоторого кода на ASP.NET Core и хотел бы узнать наиболее эффективный способ отправки файлов, то есть "загрузки" файлов, из веб-службы ASP.NET Core.
С моим старым кодом ASP.NET я использовал FileStream:
var content = new FileStream(
myLocation,
FileMode.Open, FileAccess.Read, FileShare.Read);
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(content)
};
Однако я пытался найти.NET-эквивалент функции sendfile() во FreeBSD и нашел HttpResponse.TransmitFile. Я полагаю, это будет быстрее?
Я также обеспокоен тем, что файл должен сделать дополнительный переход из Kestrel в IIS, прежде чем ударить пользователя. Любой совет?
1 ответ
Если вы имеете в виду потоковую передачу файла клиенту, вы можете использовать FileResult в качестве типа возврата.
public FileResult DownloadFile(string id) {
var content = new FileStream(myLocation,FileMode.Open, FileAccess.Read, FileShare.Read);
var response = File(content, "application/octet-stream");//FileStreamResult
return response;
}
FileResult является родителем всех результатов действий, связанных с файлами, таких как FileContentResult, FileStreamResult, VirtualFileResult, PhysicalFileResult. Обратитесь к документации ASP.NET Core ActionResult.