1. 程式人生 > >ASP.NET Core 上傳多檔案 超簡單教程

ASP.NET Core 上傳多檔案 超簡單教程

示例原始碼下載地址

專案地址 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

提示

上傳重複檔案後,介面會提示

上傳太大或太多檔案,會報錯