我有以下代码,我从任何非必要的行中删除了离开最小可再现的情况。我期望它能够返回图像,但事实并非如此。据我所知,它返回一个空文件:
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本身。
答案 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" );