ASP.NET MVC FileStreamResult未按预期工作

时间:2009-07-13 19:56:33

标签: asp.net-mvc stream 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 个答案:

答案 0 :(得分:67)

您需要插入

stream.Seek(0, SeekOrigin.Begin);

之后

Image.Save()

这会将流回放到已保存图像的开头。否则,流将位于流的末尾,并且不会向接收器发送任何内容。

答案 1 :(得分:11)

尝试倒回MemoryStream。 “光标”留在文件的末尾,在您将流“回放”到开头之前没有任何内容可读。

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