ASP.NET Core 上傳多檔案 超簡單教程
阿新 • • 發佈:2018-12-31
示例原始碼下載地址
專案地址 https://dev.tencent.com/u/whuanle/p/asp.netcore_file_upload/attachment
建立應用程式
開啟VS 2017
--新建 ASP.NET Core Web 應用程式
--Web 應用程式(模型檢視控制器)
程式名字、路徑,預設即可
刪除不必要的內容
-
開啟 HomeController.cs 檔案,刪除所有方法
-
開啟 Views/Home目錄,刪除所有檔案
-
在應用程式中 新建 file 目錄
開始程式設計
那麼,現在來寫程式,實現檔案上傳
第一步 檔案上傳介面
在 HomeController 中新建一個方法
public IActionResult Upload() { return View(); }
然後在 Views/Home 目錄中新增一個檢視 Upload.cshtml
把以下程式碼複製到 Upload.cshtml 中
這部分就是一個檔案上傳表單,沒有什麼特殊的,這裡不解釋程式碼作用。
@{ ViewData["Title"] = "Upload"; } <form method="post" enctype="multipart/form-data" asp-controller="Home" asp-action="UploadFiles"> <div class="form-group"> <div class="col-md-12"> <p>選擇要上傳的檔案</p> <input type="file" name="files" multiple /> </div> </div> <div class="form-group"> <div class="col-md-12"> <input type="submit" value="上傳" /> </div> </div> </form>
附
第二步 檔案上傳功能
開啟 HomeController
頭部的引用如下
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks;
在 HomeController 類裡面新增一個方法
public async Task<IActionResult> UploadFiles(List<IFormFile> files) { long size = files.Sum(f => f.Length); //統計所有檔案的大小 var filepath = Directory.GetCurrentDirectory() + "\\file"; //儲存檔案的路徑 ViewBag.log = "日誌內容為:"; //記錄日誌內容 foreach (var item in files) //上傳選定的檔案列表 { if (item.Length > 0) //檔案大小 0 才上傳 { var thispath = filepath + "\\" + item.FileName; //當前上傳檔案應存放的位置 if (System.IO.File.Exists(thispath) == true) //如果檔案已經存在,跳過此檔案的上傳 { ViewBag.log += "\r\n檔案已存在:" + thispath.ToString(); continue; } //上傳檔案 using (var stream = new FileStream(thispath, FileMode.Create)) //建立特定名稱的檔案流 { try { await item.CopyToAsync(stream); //上傳檔案 } catch (Exception ex) //上傳異常處理 { ViewBag.log += "\r\n" + ex.ToString(); } } } } return View(); }
貼出一張結構圖
在 Views/Home 目錄中,新建一個檢視 UploadFiles.cshtml
開啟 UploadFiles.cshtml
把以下程式碼放進去
不用管下面的程式碼是幹什麼的
@using System.IO @{ ViewData["Title"] = "UploadFiles"; } <h2>目錄內容</h2> <ul class="list-group"> @{ var items = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\file"); foreach (var item in items) { <li class="list-group-item">@item.ToString()</li> } } </ul> <hr /> <h2>日誌內容</h2> <p> @ViewBag.log </p>
執行
按 F5 執行應用
開啟
https://localhost:你的埠/Home/Upload
即可看到執行介面
請選擇體積較小的文件檔案如txt、doc、pdf,圖片等進行測試,上傳的檔案不要太多
不用選擇太多、體積大檔案、dll檔案、可執行檔案等等,不然有可能報錯。
上傳成功
上傳成功將會跳轉到 https://localhost:你的埠/Home/UploadFiles
提示
上傳重複檔案後,介面會提示
上傳太大或太多檔案,會報錯