2009-07-13 6 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

あなたが保存された画像の先頭にストリームを巻き戻します

Image.Save() 

これに呼び出した後

stream.Seek(0, SeekOrigin.Begin); 

を挿入する必要があります。さもなければ、ストリームはストリームの終わりに位置付けられ、何も受信機に送られない。

+0

本当にクールな答え。 –

+0

私はこれをエクセルで試してみましたが、うまくいきませんでした。 – superachu

11

MemoryStreamを巻き戻してみます。 "カーソル"はファイルの最後に残されており、ストリームを最初に巻き戻すまでは何も表示されません。

image.Save(stream, ImageFormat.Jpeg); 
stream.Seek(0, SeekOrigin.Begin); 
return new FileStreamResult(stream, "image/jpeg"); 
関連する問題