ASP.NET MVC,檔案上傳搭配資料庫(FileUpload 檔案二進位存入資料表)

ASP.NET MVC,檔案上傳搭配資料庫

(FileUpload 檔案二進位存入資料表)


 

 

這個範例源自微軟ASP.NET MVC認證考試的教材 -- https://github.com/MicrosoftLearning/20486-DevelopingASPNETMVCWebApplications

 

FileUpload檔案上傳時,如果要把圖片(二進位內容)存入資料表

資料表的欄位「資料型態」請設定為 Image (舊版本在用的)或 VarBinary(MAX)

 

(1)  轉成類別檔以後,會變成

     public byte[] PhotoFile { get; set; }

 

(2) 上傳以後,存入(寫入、新增)資料表的寫法:

        [HttpPost]

        [ValidateAntiForgeryToken] 

        public ActionResult Create(Photo photo, HttpPostedFileBase image)

        {   //                                                           ****************************

            if (ModelState.IsValid)

            {   //*** 檔案上傳 ****************************************(start)

                if (image != null)   {

                    photo.PhotoFile = new byte[image.ContentLength];
                    image.InputStream.Read(photo.PhotoFile, 0, image.ContentLength);

                }

                //*** 檔案上傳 ****************************************(end)

                _db.Photos.Add(photo);   // 新增一筆記錄
                _db.SaveChanges();   // 正式寫入資料庫!

                return RedirectToAction("Index");

            }

            return View(photo);

        }

 

(3) 從資料表裡面「讀取」這些二進位的檔案,並還原成圖片

        public ActionResult Index()

        {

            return View("Index", _db.Photos.ToList());

        }

        //*** 把資料表裡面的「二進位」內容,還原成圖片檔 ****************************

        public FileContentResult GetImage(int PhotoID)

        {

            Photo requestedPhoto = _db.Photos.FirstOrDefault(p => p.PhotoID == PhotoID);

            if (requestedPhoto != null)   {

                return File(requestedPhoto.PhotoFile, "image/jpeg");

            }

            else   {

                return null;

            }

        }

 

(4) 容易犯錯的地方在於「檢視畫面(View)」,

    我們採用 List範本,列出所有照片

    @foreach (var item in Model) {

            @if (item.PhotoFile != null) {

                <img hsrc="@Url.Action("GetImage 動作", "控制器名稱", new { item.PhotoID })" />

                <!-- 最後紅字的地方,轉成HTML原始碼會變成 src="/控制器名稱/GetImage?PhotoID=1"  -->      

            }     

    }

 

ASP.NET MVC 第一天 5.5小時 完整教學影片,免費觀賞

請看  http://mis2000lab.pixnet.net/blog/post/35141956

完整影片大綱,可以參閱  ASP.NET MVC 線上教學影片、線上教程(第一天 "免費"觀賞,5.5小時)

http://mis2000lab.pixnet.net/blog/post/35172535

 

第一天,5.5小時的影片(完整內容),免費讓您評估

不用客氣。  註冊完 https://vimeo.com/ 的會員(免費帳號),就寫信跟我登記吧!

 

請把下圖的資訊,告訴我!

一律透過 E-Mail報名。謝謝您     mis2000lab (at) yahoo.com.tw  或是  school (at) mis2000lab.net

Vimeo_05.jpg

ASP.NET MVC (自修 / 網路自學)相關資源

https://dotblogs.com.tw/mis2000lab/2016/03/09/aspnet_mvc_tutorial

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 135hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課