iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
Modern Web

打net core肉飯系列 第 22

[2020鐵人賽] Day22 - .net core 檔案上傳

這邊來簡單講一下檔案上傳如何Binding資料,通常各大網站都會支援上傳功能,net core下當然也提供。

支援多檔上傳,input的name必須設定跟後端接的property一樣,用form包起來,submit後丟到後端controller,這邊使用List接收多個檔案,如果只有一個也可以使用IFormFile這個類別接收就好。
MVC範例:
View

<form id="form" method="post" enctype="multipart/form-data" action="@Url.Action("SaveData","Test")">
<input name="file1" id="file" type="file" class="fileGrp" />
<input type="submit" value="送出" />
</form>

Controller

public IActionResult SaveData(List<IFormFile> file1)
{
    SaveFiles("c:\test\",file1);
}

        protected void SaveFiles(string path, List<IFormFile> files)
        {
            //一樣要檢查路徑
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);

            foreach (var file in files)
            {
                using (var stream = new FileStream(Path.Combine(path, Path.GetFileName(file.FileName)), FileMode.OpenOrCreate))
                {
                    file.CopyTo(stream);
                }
            }
        }

這邊還是提醒一下,Path.GetFileName(file.FileName)是取得檔案名稱含附檔名,如果直接使用file.FileName在Chrome底下會ok,但在IE底下可是會直接取得本機完整路徑(如C:\xxx\xxx.pdf)的,所以後面存取檔案會有問題。

Razor Page範例:

參考資料
https://docs.microsoft.com/zh-tw/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1


上一篇
[2020鐵人賽] Day21 - Razor Page(1/3)
下一篇
[2020鐵人賽] Day23 - Razor Page(2/3)
系列文
打net core肉飯30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言