26

我有以下代码,我删除了任何非必要的行,以留下最小的可重现案例。我期望它返回图像,但事实并非如此。据我所见,它返回一个空文件:

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 本身。

4

2 回答 2

68

你需要插入

stream.Seek(0, SeekOrigin.Begin);

致电后

Image.Save()

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

于 2009-07-13T20:00:50.333 回答
12

尝试倒带 MemoryStream。“光标”留在文件的末尾,在您将流“倒回”到开头之前,没有什么可读取的。

 image.Save( stream, ImageFormat.Jpeg );
 stream.Seek( 0, SeekOrigin.Begin );
 return new FileStreamResult( stream, "image/jpeg" );
于 2009-07-13T20:01:20.037 回答