ASP.NET MVC 的 FileStreamResult 不按预期工作

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

2个回答

68

你需要插入

stream.Seek(0, SeekOrigin.Begin);

调用后

Image.Save()
这将倒回流到保存的图像的开头。否则,流将定位在流的末尾,接收器将不会收到任何内容。

我尝试在Excel中实现这个,但是没有成功。你有什么想法吗? - superachu

12

尝试倒回MemoryStream。"光标"停留在文件末尾,直到你将流"倒回"到开头,才能开始读取。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接