今天一樣筆記一下,最近就是被踢下去寫 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? FormFiles { get; set; }
}
[BindProperty]
public BufferedMultipleFileUploadPhysical? FileUpload { get; set; }
public void OnGet()
{
}
///
/// 按下上傳後的處理
///
///
public IActionResult OnPostUpload()
{
//檢查並建立站存的檔案夾
if (!Directory.Exists(AppDomain.CurrentDomain + "tempfile"))
{
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "tempfile");
}
if (FileUpload != null && FileUpload.FormFiles != null)
{
//處理多檔
//這邊使用原檔名,當然不建議這麼作,有安全問題可以在這裡處理
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
<form method="post" id="formMain" enctype="multipart/form-data">
<div class="form-group col-lg-12 col-xs-12">
<label> 上傳檔案們</label>
<br />
@* 支持傳送多檔所以加上 multiple*@
<input asp-for="FileUpload.FormFiles" type="file" class="form-control" multiple />
<span asp-validation-for="FileUpload.FormFiles"></span>
</div>
<div class="col-lg-12 col-xs-12 form-group" style="margin-top:20px">
<button asp-page-handler="Upload" class="btn btn-success"><i class="fa fa-upload" aria-hidden="true"></i> 上傳檔案</button>
<br />
</div>
</form>
關鍵是記得 form 的 enctype="multipart/form-data" ,這地方可以讓你卡關一下,如果你沒注意到的話
就筆記一下,有寫得不清楚的
可以參考
https://learn.microsoft.com/zh-tw/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0