画像のデータベースアクセス

6541 ワード

SQL Serverデータベースの画像はバイナリ形式のイメージタイプで保存し、預け入れ時はバイナリデータに変換し、取り出す時はバイナリからイメージ/jpg形式に変換して表示します。
保存:
ビューコードには、ファイルをアップロードするコントロールが必要です。
@using (Html.BeginForm("Index", "NewImg", FormMethod.Post, new { enctype = "multipart/form-data" }))

{

    if (@ViewBag.ImgId != null)

    {

        <img src="@Url.Action("ShowImg", "Image", new { id = ViewBag.ImgId })" width="111" height="111" alt="img" />

        <br />

        <br />

    }

    <input type="file" name="imgUserProfile" id="imgUserProfile" />

    <br />

    <br />

    <input type="submit" value="upload img" />

}
コントローラでは、入力された画像ファイルを受信し、データベースにbyteタイプで保存します。
        public ActionResult Index(HttpPostedFileBase imgUserProfile)

        {

            try

            {

                using (var context = new newpicEntities())

                {

                    var imgData = new pict1();//

                    var imgLength = imgUserProfile.ContentLength;



                    var imgByte = new byte[imgLength];



                    imgUserProfile.InputStream.Read(imgByte, 0, imgLength);



                    imgData.pict = imgByte;



                    context.AddTopict1(imgData);

                    context.SaveChanges();

                    ViewBag.ImgId = imgData.id;

                    ViewBag.Result = "success";

                }

            }

            catch (Exception e)

            {

                ViewBag.Result = e;

            }

            return View("Index");

        }
データベースの画像を読み込み、表示します。
コントローラ
        public ActionResult ShowImg(int id)

        {

            var image = (from m in db.pict1

                         where m.id == id

                         select m.pict).FirstOrDefault();

            var stream = new MemoryStream(image.ToArray());

            return new FileStreamResult(stream, "image/jpg");

        }
表示
<img src="@Url.Action("ShowImg","Image",new{id= item.id})" height="117px" width="144px" alt=""/>