私の .Net MVC3 アプリケーションでは、いくつかの画像を SQL Server データベースに保存しています (これらは .png ファイルです)。ファイルシステムで作業するよりもデータベースで作業する方が好きなので、可能であればこの方法を使い続けたいと思っています (これは小さなページであり、誰もパフォーマンスの問題に気付かないでしょう)。
画像をデータベースに保存することは問題ないようです。データを取り戻すことも問題ではありません。私が問題を抱えているのは、ビューに画像を表示することです。
イメージは、Varbinary(max) として SQL Server データベースに格納されます。ビュー モデルは、Byte[] を使用して情報を保持します。ビューモデルには他のデータが保存されていますが、画像に関する限り、私が行ったことは次のとおりです。
コントローラ:
ViewModel data = Repository.GetData();
//data now holds all of the information that I need for my view
//data.Image is of type Byte[], and it holds the image I am having trouble displaying.
return View(data);
意見
@model = data
@Html.DisplayFor(model => model.x) @*works*@
@Html.DisplayFor(model => model.Image) @*no good*@
これを機能させるには、イメージを一時ファイルとして保存する必要がありますか? もしそうなら、画像をデータベースに保存するのは時間の無駄のようです。
モデルとして FileStreamResult を返す場合:
FileStream fs = new FileStream(path, Open, Read);
return View(new FileStreamResult(fs, "image/png"));
....そして、ビューのモデルを「FileStreamResult」に変更しましたが、まだ画像を表示する方法が見つかりません。
しかし、次のように FileStreamResult を返すと:
FileStream fs = new FileStream(path, Open, Read);
return new FileStreamResult(fs, "image/png");
次に、画像が表示されます(ただし、これはブラウザーがそのファイルを「開く」だけで、htmlとして「レンダリング」するのではないと思います)。
このトピックについてすでに多くの質問があることは知っていますが、それらを見てきました。Web や MVC などの基本的な理解が欠けていると思います。
ありがとう!