ASP.NET MVC FileStreamResult не работает должным образом
У меня есть следующий код, который я удалил из любых несущественных строк, чтобы оставить минимально воспроизводимый случай. Я ожидаю, что он вернет изображение, но это не так. Насколько я вижу, он возвращает пустой файл:
public ActionResult Thumbnail(int id) {
var question = GetQuestion(db, id);
var image = new Bitmap(question.ImageFullPath);
MemoryStream stream = new MemoryStream();
image.Save(stream, ImageFormat.Jpeg);
return new FileStreamResult(stream, "image/jpeg");
}
Можете ли вы определить, что не так с этим кодом? В отладчике я вижу, что поток увеличивается в размере, поэтому кажется, что он получает данные, хотя я не смог убедиться, что это правильные данные. Я понятия не имею, как отладить сам FileStreamResult.
2 ответа
Вам нужно вставить
stream.Seek(0, SeekOrigin.Begin);
после звонка
Image.Save()
Это перемотает поток в начало сохраненного изображения. В противном случае поток будет расположен в конце потока, и получателю ничего не будет отправлено.
Попробуйте перемотать MemoryStream. "Курсор" остается в конце файла, и читать нечего, пока вы не "перемотаете" поток в начало.
image.Save( stream, ImageFormat.Jpeg );
stream.Seek( 0, SeekOrigin.Begin );
return new FileStreamResult( stream, "image/jpeg" );