[C#] .ASP.NET Core 6.0 - 上傳多個檔案到 Server 簡單範例

2023-01-17

今天一樣筆記一下,最近就是被踢下去寫 code 而且使用 .Net 6 翻寫 Webform 

所以,遇到一些跟以前不一樣的狀況我就簡單紀錄一下,當然對很多高手來說已經是跟喝水一樣的事情

不過我就是筆記一下。




主要就是上傳多個檔案到  Server 上,微軟範例是使用 AJAX ,我這邊主要是改寫

案例就是盡量簡單化方便我之後直接 Copy Paste


FileUploadSamplePage.cshtml.cs


public class FileUploadSamplePageModel : PageModel { public class BufferedMultipleFileUploadPhysical { [System.ComponentModel.DataAnnotations.Required] [System.ComponentModel.DataAnnotations.Display(Name = "File")] public List<IFormFile>? FormFiles { get; set; } } [BindProperty] public BufferedMultipleFileUploadPhysical? FileUpload { get; set; } public void OnGet() { } /// <summary> /// 按下上傳後的處理 /// </summary> /// <returns></returns> public IActionResult OnPostUpload() { //檢查並建立站存的檔案夾 if (!Directory.Exists(AppDomain.CurrentDomain + "tempfile")) { Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "tempfile"); } if (FileUpload != null && FileUpload.FormFiles != null) { //處理多檔 //這邊使用原檔名&#65292;當然不建議這麼作&#65292;有安全問題可以在這裡處理 foreach (var formFile in FileUpload.FormFiles) { using (var ms = new MemoryStream()) { formFile.CopyTo(ms); var fileBytes = ms.ToArray(); System.IO.File.WriteAllBytes(AppDomain.CurrentDomain.BaseDirectory + "tempfile" + Path.DirectorySeparatorChar + formFile.FileName, fileBytes); } } } return Page(); } }


FileUploadSamplePage.cshtml

&lt;form method=&quot;post&quot; id=&quot;formMain&quot; enctype=&quot;multipart/form-data&quot;&gt; &lt;div class=&quot;form-group col-lg-12 col-xs-12&quot;&gt; &lt;label&gt; 上傳檔案們&lt;/label&gt; &lt;br /&gt; @* 支持傳送多檔所以加上 multiple*@ &lt;input asp-for=&quot;FileUpload.FormFiles&quot; type=&quot;file&quot; class=&quot;form-control&quot; multiple /&gt; &lt;span asp-validation-for=&quot;FileUpload.FormFiles&quot;&gt;&lt;/span&gt; &lt;/div&gt; &lt;div class=&quot;col-lg-12 col-xs-12 form-group&quot; style=&quot;margin-top:20px&quot;&gt; &lt;button asp-page-handler=&quot;Upload&quot; class=&quot;btn btn-success&quot;&gt;&lt;i class=&quot;fa fa-upload&quot; aria-hidden=&quot;true&quot;&gt;&lt;/i&gt; &amp;nbsp;上傳檔案&lt;/button&gt; &lt;br /&gt; &lt;/div&gt; &lt;/form&gt;


關鍵是記得 form 的  enctype="multipart/form-data" ,這地方可以讓你卡關一下,如果你沒注意到的話

就筆記一下,有寫得不清楚的

可以參考

https://learn.microsoft.com/zh-tw/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0


當麻許的碎念筆記 2014 | Donma Hsu Design.