ASP.NET Core實(shí)現(xiàn)多文件上傳
創(chuàng)建應(yīng)用程序
打開(kāi)VS 2017
--新建 ASP.NET Core Web 應(yīng)用程序
--Web 應(yīng)用程序(模型視圖控制器)
程序名字、路徑,默認(rèn)即可
刪除不必要的內(nèi)容
打開(kāi)HomeController.cs 文件,刪除所有方法
打開(kāi)Views/Home目錄,刪除所有文件
在應(yīng)用程序中 新建 file 目錄
開(kāi)始編程
那么,現(xiàn)在來(lái)寫(xiě)程序,實(shí)現(xiàn)文件上傳
第一步 文件上傳界面
在HomeController 中新建一個(gè)方法
這個(gè) Action 是上傳文件的界面
public IActionResult Upload() { return View(); }
然后在 Views/Home 目錄中添加一個(gè)視圖 Upload.cshtml
把以下代碼復(fù)制到 Upload.cshtml 中
這部分就是一個(gè)文件上傳表單,沒(méi)有什么特殊的,這里不解釋代碼作用。
@{ 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>
附
第二步 文件上傳功能
打開(kāi) 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 類里面添加一個(gè)方法
[HttpPost] //上傳文件是 post 方式,這里加不加都可以 public async Task<IActionResult> UploadFiles(List<IFormFile> files) { long size = files.Sum(f => f.Length); //統(tǒng)計(jì)所有文件的大小 var filepath = Directory.GetCurrentDirectory() + "\\file"; //存儲(chǔ)文件的路徑 ViewBag.log = "日志內(nèi)容為:"; //記錄日志內(nèi)容 foreach (var item in files) //上傳選定的文件列表 { if (item.Length > 0) //文件大小 0 才上傳 { var thispath = filepath + "\\" + item.FileName; //當(dāng)前上傳文件應(yīng)存放的位置 if (System.IO.File.Exists(thispath) == true) //如果文件已經(jīng)存在,跳過(guò)此文件的上傳 { ViewBag.log += "\r\n文件已存在:" + thispath.ToString(); continue; } //上傳文件 using (var stream = new FileStream(thispath, FileMode.Create)) //創(chuàng)建特定名稱的文件流 { try { await item.CopyToAsync(stream); //上傳文件 } catch (Exception ex) //上傳異常處理 { ViewBag.log += "\r\n" + ex.ToString(); } } } } return View(); }
注:IFormFile 的用法將在后面介紹
貼出一張結(jié)構(gòu)圖
在 Views/Home 目錄中,新建一個(gè)視圖UploadFiles.cshtml
打開(kāi) UploadFiles.cshtml
把以下代碼放進(jìn)去
下面代碼是輸出 file目錄下的文件,并輸出 日志記錄
@using System.IO @{ ViewData["Title"] = "UploadFiles"; } <h2>目錄內(nèi)容</h2> <ul class="list-group"> //razor語(yǔ)法 輸出file目錄的文件 @{ var items = Directory.GetFiles(Directory.GetCurrentDirectory() + "\\file"); foreach (var item in items) { <li class="list-group-item">@item.ToString()</li> } } </ul> <hr /> <h2>日志內(nèi)容</h2> <p> @ViewBag.log </p>
運(yùn)行
按 F5 運(yùn)行應(yīng)用
打開(kāi)
https://localhost:你的端口/Home/Upload
即可看到運(yùn)行界面
請(qǐng)選擇體積較小的文檔文件如txt、doc、pdf,圖片等進(jìn)行測(cè)試,上傳的文件不要太多
不用選擇太多、體積大文件、dll文件、可運(yùn)行文件等等,不然有可能報(bào)錯(cuò)。
上傳成功
上傳成功將會(huì)跳轉(zhuǎn)到 https://localhost:你的端口/Home/UploadFiles
補(bǔ)充說(shuō)明
上傳重復(fù)文件后,界面會(huì)提示
上傳太大或太多文件,會(huì)報(bào)錯(cuò)
IFormFile 的用法
所屬命名空間為Microsoft.AspNetCore.Http
屬性
ContentDisposition | 獲取上載文件的原始Content-Disposition標(biāo)頭。 |
ContentType | 獲取上載文件的原始Content-Type標(biāo)頭。 |
FileName | 從Content-Disposition標(biāo)頭中獲取文件名。 |
Headers | 獲取上傳文件的標(biāo)題字典。 |
Length | 獲取文件長(zhǎng)度,以字節(jié)為單位。 |
Name | 從Content-Disposition標(biāo)頭中獲取表單字段名稱。 |
方法
CopyTo(Stream) | 將上載文件的內(nèi)容復(fù)制到target流中。 |
CopyToAsync(Stream, CancellationToken) | 異步將上載文件的內(nèi)容復(fù)制到target流中。 |
OpenReadStream() | 打開(kāi)請(qǐng)求流以讀取上載的文件。 |
示例源碼下載地址
https://qcloud.coding.net/api/project/3915794/files/4463836/download
項(xiàng)目地址https://dev.tencent.com/u/whuanle/p/asp.netcore_file_upload/attachment
到此這篇關(guān)于ASP.NET Core實(shí)現(xiàn)多文件上傳的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
ASP.NET MVC HttpPostedFileBase文件上傳的實(shí)例代碼
這篇文章主要介紹了ASP.NET MVC HttpPostedFileBase文件上傳,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07.Net core下直接執(zhí)行SQL語(yǔ)句并生成DataTable的實(shí)現(xiàn)方法
.net core可以執(zhí)行SQL語(yǔ)句,但是只能生成強(qiáng)類型的返回結(jié)果。這篇文章主要介紹了.Net core下直接執(zhí)行SQL語(yǔ)句并生成DataTable的相關(guān)資料,需要的朋友可以參考下2016-11-11為自己的ASP網(wǎng)站系統(tǒng)構(gòu)建一套標(biāo)記語(yǔ)言
為自己的ASP網(wǎng)站系統(tǒng)構(gòu)建一套標(biāo)記語(yǔ)言...2006-09-09Asp.net mvc 數(shù)據(jù)調(diào)用示例代碼
Asp.net mvc 數(shù)據(jù)調(diào)用示例代碼,學(xué)習(xí)asp.net mvc框架的朋友可以參考下。2010-10-10VS2017 Cordova Ionic2 移動(dòng)開(kāi)發(fā)環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了VS2017 Cordova Ionic2 移動(dòng)開(kāi)發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04ASP.NET core Web中使用appsettings.json配置文件的方法
這篇文章主要給大家介紹了在ASP.NET core Web中使用appsettings.json配置文件的方法,文中給出了詳細(xì)的示例代碼,需要的朋友可以參考學(xué)習(xí),下面來(lái)一起看看吧。2017-04-04