ASP.NET MVC FileStreamResult не работает должным образом - PullRequest
26 голосов
/ 13 июля 2009

У меня есть следующий код, который я удалил из любых несущественных строк, чтобы оставить минимально воспроизводимый случай. Я ожидаю, что он вернет изображение, но это не так. Насколько я вижу, он возвращает пустой файл:

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 ]

67 голосов
/ 14 июля 2009

Вам нужно вставить

stream.Seek(0, SeekOrigin.Begin);

после звонка на

Image.Save()

Это перемотает поток на начало сохраненного изображения. В противном случае поток будет расположен в конце потока, и получателю ничего не будет отправлено.

11 голосов
/ 14 июля 2009

Попробуйте перемотать MemoryStream. «Курсор» остается в конце файла, и читать нечего, пока вы не «перемотаете» поток в начало.

 image.Save( stream, ImageFormat.Jpeg );
 stream.Seek( 0, SeekOrigin.Begin );
 return new FileStreamResult( stream, "image/jpeg" );
...