У меня есть такой способ.
[HttpGet("view/{fileId}/{width}/{height}/{name}")]
public async Task<FileStreamResult> View(Guid fileId, int width, int height, string name)
{
var fileInfo = await _fileViewer.GetImageInfo(fileId, width, height);
FileStream f = new FileStream(fileInfo.FilePath, FileMode.Open);
return File(f, fileInfo.MimeType);
}
Которая просто возвращает преобразованное изображение в браузер. Оно работает. Но насколько я могу судить, это утечка памяти.
FileStream f
никогда не утилизируется.
Я вижу, что память моих серверов медленно расходуется.
Если я добавлю туда оператор using
, я получаю сообщение об ошибке, что поток закрыт, т.е. оператор using закрывается до того, как файл будет возвращен пользователю.
Как это сделать правильно?
ОБНОВЛЕНИЕ 1. Этот:
using (FileStream f = new FileStream(fileInfo.FilePath, FileMode.Open))
{
return File(f, fileInfo.MimeType);
}
дает
System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. Имя объекта: «Нет доступа к закрытому файлу.».
using
? Очевидно, что правильный ответ - либо явно вызватьDispose()
, либо заключить вашFileStream
в операторusing
, но нам нужно будет оценить, почему ваш операторusing
не работал. - person Jeremy Caney   schedule 09.02.2020Stream
, который вы передаете этомуFile
методу. - person Kirk Larkin   schedule 09.02.2020