2009-07-13 29 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");