Я долго искал, и хотя все должно быть просто, я просто не могу заставить его работать. На основании примеров, которые я видел, вот где я дошел:
SomeAppService.cs
public async Task<FileStream> Download(long? id)
{
var attachment = await _repository.FirstOrDefaultAsync(x => x.Id == id);
var fileStream = new FileStream($"{attachment.FileName}.{attachment.FileExtension}",
FileMode.Create, FileAccess.Write);
fileStream.Write(attachment.File, 0, attachment.File.Length);
return fileStream;
}
Как можно заметить, "FileName", «FileExtension» и «File» (который является вышеупомянутым байтовым массивом) хранятся в базе данных. Вложение может быть любым видом файла, за исключением запрещенных расширений в методе Upload (не показан). Тогда в моем контроллере у меня есть:
SomeController.cs
[AllowAnonymous]
[HttpGet("Download/{id}")]
public async Task<IActionResult> Download(long? id)
{
var fileStream = await appService.Download(id);
return new FileStreamResult(fileStream, "application/octet-stream");
}
Однако, когда я достигаю конечной точки загрузки, я получаю файл с именем "response" , без расширения, с 0 байтами.
Ресурсы:
Файл возврата в ASP. Net Core Web API
Возврат FileResult из байта []
Сохранение и загрузка MemoryStream в / из файла (Ответ с 255 ответами дал мне представление о том, как превратить массив байтов в поток файлов, но я не знаю, работает ли это)