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" );
Другие вопросы по тегам