ASP.NET Core — FileUpload 檔案上傳 + NPOI

更新於 發佈於 閱讀時間約 9 分鐘
ASP.NET Core 3.1 — FileUpload 檔案上傳 + NPOI
我把以前NPOI的範例改成 .NET Core版,但在檔案上傳(FileUpload)上遇見一點問題。
ASP.NET Core .31 — FileUpload 檔案上傳跟 .NET完整版(MVC 5)有點不同
改用 IFormFile來做,但大同小異。
上傳 + NPOI讀取 Excel檔
這個範例從 Web Form => MVC 5 => ASP.NET core寫法都差不多。
如果您要用 LinqToExcel,可以把 Excel的 “工作表”當成 DB資料表 那樣讀取,也很簡便。
== 檢視畫面 ==
為了支援檔案上傳,HTML 表單必須指定 multipart/form-data的編碼類型(enctype)。
若要支援上傳多個檔案的 files input 元素,請在 <input> 元素上提供 multiple 屬性。
這些寫法我盡量跟 MVC 5類似,初學者就不會覺得差異太大
<! — 動作 , 控制器 →
 @using (Html.BeginForm(“Create”, “NPOI”, FormMethod.Post, new { enctype = “multipart/form-data” })) 
 {
 <div class=”form-horizontal”>
 <h4>檔案上傳 與 NPOI</h4>……基本款
 <hr />
<div class=”form-group”>
 <! — ******************************************************************** →
 <i>這裡需要手動改成 “檔案上傳”的表單元件 type=”file”</i><br />
 <input type=”file” id=”FileUpload_FileName” name=”FileUpload_FileName” />
 @* 若要支援上傳多個檔案的 files input 元素,請在 <input> 元素上提供 multiple 屬性 *@
 <! — ******************************************************************** →
 </div>
 <div class=”form-group”>
 <input type=”submit” value=”Create(檔案上傳 與 NPOI)” class=”btn btn-default” />
<h3>@ViewBag.Message</h3>
 </div>
 </div>
 }
== 控制器 ==
(命名空間)
using System.IO; // — FileStream會用到這個命名空間
using System.Text;
using Microsoft.AspNetCore.Http; //檔案上傳 IFormFile 會用到
// NPOI 2.0的命名空間 — HSSF(Excel 2003), XSSF(Excel 2007), XWPF(Word 2007)。 
using NPOI.XSSF.UserModel; // — XSSF 用來產生Excel 2007檔案(.xlsx)
using NPOI.SS.UserModel; // — v.1.2.4起 新增的。
//==================================
 //== 檔案上傳 與 NPOI — 對應 Web Form的範例 — NPOI_20_04_FileUpload.aspx
 // https://docs.microsoft.com/zh-tw/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1
 //==================================
 public IActionResult Create() // 基本款
 { // 檢視畫面,為了「檔案上傳」,有些地方要自己動手修改。請看上面的「檢視畫面」。
 return View();
 }
[HttpPost]
 public IActionResult Create(IFormFile FileUpload_FileName) // 多檔上傳,請用 List<IFormFile>
 { // **************
 try
 { 
 if (FileUpload_FileName.Length > 0) // 檢查 <input type=”file”>; 是否輸入檔案?
 {
 
XSSFWorkbook workbook; // NPOI。透過 NuGet安裝,必須裝 DotNETCore專屬的NPOI版本。
using (var ms = new MemoryStream())
 {
FileUpload_FileName.CopyTo(ms);
 //if (ms.Length < 2097152)
 //{ // 限制上傳檔案必須小於2MB。 https://docs.microsoft.com/zh-tw/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1

 //}
//*** 方法二 *** 上傳檔案,不用存檔。直接讓NOPI 讀取檔案內容(Stream串流)
Stream stream = new MemoryStream(ms.ToArray());

workbook = new XSSFWorkbook(stream); // 將剛剛的Excel (Stream)讀取到工作表裡面
 //== XSSFWorkbook() 只能讀取 System.IO.Stream
 }
// 讀取 Excel裡面的工作表(跟以前 MVC 5完全相同)
 #region
 XSSFSheet u_sheet = (XSSFSheet)workbook.GetSheetAt(0); // 0表示:第一個 worksheet工作表
StringBuilder SB = new StringBuilder(); // System.Text命名空間
XSSFRow headerRow = (XSSFRow)u_sheet.GetRow(0); // — Excel 表頭列 
 // 表頭列,共有幾個 “欄位”?(取得最後一欄的數字)
 for (int k = headerRow.FirstCellNum; k < headerRow.LastCellNum; k++)
 { // 把上傳的 Excel「表頭列」,每一欄位抓到
 if (headerRow.GetCell(k) != null) {
 SB.Append(headerRow.GetCell(k).StringCellValue + “ “);
 }
 }
 // for迴圈的「啟始值」要加一,表示不包含 Excel表頭列
 for (int i = (u_sheet.FirstRowNum + 1); i <= u_sheet.LastRowNum; i++)
 { // 每一列做迴圈
 XSSFRow row = (XSSFRow)u_sheet.GetRow(i); //不包含 Excel表頭列的 “其他資料列”
 for (int j = row.FirstCellNum; j < row.LastCellNum; j++)
 { // — 每一個欄位(行)做迴圈
 if (row.GetCell(j) != null) {
 SB.Append(row.GetCell(j).ToString() + “ “); //每一個欄位
 }
 }
 ViewBag.Message = “上傳成功。” + SB.ToString();
 #endregion
 }
 }
 }
 catch {
 ViewBag.Message = “上傳失敗。File upload failed!!”;
 }
 return View();
 }
為什麼會看到廣告
avatar-img
4會員
128內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
兩千MIS的沙龍 的其他內容
使用沒有 ASP.NET Core 身分識別的 cookie 驗證(不使用ASP.NET Core Identity的 cookie 驗證) ASP.NET Core 3.1與 2.x ,搭配 System.Security.Claims 命名空間 的 ClaimsIdentity來做
適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
ASP.NET (Web Form) 遠距教學、歡迎在家自修、學習 ***本課程是「事先錄影」的影片。繳費後就能觀賞!*** 繳費後,看完第一天課程  。如不滿意,無需理由,全額退費!
透過Win10內部的設定(軟體調整 / 校正顯示器) ………………………………………………………….. Notebook 筆記型電腦、筆記本、本本 沒有一般螢幕可以調整「對比」的按鈕, 所以要透過 Win10內部的設定(軟體調整 / 校正顯示器) 我也擔心自己忘記,所以記錄下來。圖片如下。
P.S. 我也不知道要放什麼圖片,就選一個「發大財」的 :-P 常有朋友問起,我簡單說一下: **「寫書」花費的時間大約要三個月(這算是全力在寫,很快的!)加上編輯、審稿、出版(約兩個月時間) 總共要花五個月。 **「線上影片」錄製的時間如果是一天,後製作的時間要乘以三倍。 不過 ……
ASP.NET專題實務,上下兩集,書本範例下載 第零章。初學者 從零開始。  [Youtube影片] 安裝 VS 2017/ 2019有幾個地方要注意,請看 https://vimeo.com/330999680 ASP.NET專題實務 / 博碩出版 上下兩集的範例,由此下載 == 博客來 ==
使用沒有 ASP.NET Core 身分識別的 cookie 驗證(不使用ASP.NET Core Identity的 cookie 驗證) ASP.NET Core 3.1與 2.x ,搭配 System.Security.Claims 命名空間 的 ClaimsIdentity來做
適合對象:想學習 ASP.NET網頁程式(後端、MVC)、資料庫入門與應用。課程最後提供一個「線上相簿」的專案與完整解說。 從零開始學起。第一堂課(5.5小時 完整內容)免費讓您觀賞。看完了,喜歡再付錢。請來信申請。 不用擔心自己程度不好,第一天「完整」課程  看完了再說  .......
ASP.NET (Web Form) 遠距教學、歡迎在家自修、學習 ***本課程是「事先錄影」的影片。繳費後就能觀賞!*** 繳費後,看完第一天課程  。如不滿意,無需理由,全額退費!
透過Win10內部的設定(軟體調整 / 校正顯示器) ………………………………………………………….. Notebook 筆記型電腦、筆記本、本本 沒有一般螢幕可以調整「對比」的按鈕, 所以要透過 Win10內部的設定(軟體調整 / 校正顯示器) 我也擔心自己忘記,所以記錄下來。圖片如下。
P.S. 我也不知道要放什麼圖片,就選一個「發大財」的 :-P 常有朋友問起,我簡單說一下: **「寫書」花費的時間大約要三個月(這算是全力在寫,很快的!)加上編輯、審稿、出版(約兩個月時間) 總共要花五個月。 **「線上影片」錄製的時間如果是一天,後製作的時間要乘以三倍。 不過 ……
ASP.NET專題實務,上下兩集,書本範例下載 第零章。初學者 從零開始。  [Youtube影片] 安裝 VS 2017/ 2019有幾個地方要注意,請看 https://vimeo.com/330999680 ASP.NET專題實務 / 博碩出版 上下兩集的範例,由此下載 == 博客來 ==
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
國泰CUBE App 整合外幣換匯、基金、證券等服務,提供簡便、低成本的美股定期定額投資解決方案。 5分鐘開戶、低投資門檻,幫助新手輕鬆進軍國際股市;提供人氣排行榜,讓投資人能夠掌握市場趨勢。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~