2009-07-13 83 views
26

我有下面的代码,我从任何非必要的行中删除离开minimun重现案例。我期望的是它能够返回图像,但事实并非如此。据我可以看到它返回一个空文件: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本身。

回答

66

您需要调用后插入

stream.Seek(0, SeekOrigin.Begin); 

Image.Save() 

这将流倒回到所保存的图像的开始。否则,流将被放置在流的末尾,并且没有任何内容被发送到接收器。

+0

真的很酷的答案。 – 2014-02-11 14:03:40

11

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

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