日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET Core MVC上传、导入、导出知多少

發布時間:2025/4/9 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET Core MVC上传、导入、导出知多少 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本君已成夜貓子,本節我們來講講ASP.NET Core MVC中的上傳,這兩天在研究批量導入功能,本節順便簡單搞搞導入、導出,等博主弄妥當了再來和大家一并分享。

.NET Core MVC上傳

首先我們來看看官網的上傳的例子,再然后進行拓展訓練,官網的表單是這樣的。

<form method="post" enctype="multipart/form-data" asp-controller="UploadFiles" asp-action="Index"><div class="form-group"><div class="col-md-10"><p>Upload one or more files using this form:</p><input type="file" name="files" multiple /></div></div><div class="form-group"><div class="col-md-10"><input type="submit" value="上傳" /></div></div> </form>

在ASP.NET Core MVC中接收上傳的文件需要用?IFormFile?來接收,該接口定義如下:

public interface IFormFile {string ContentType { get; }string ContentDisposition { get; }IHeaderDictionary Headers { get; }long Length { get; }string Name { get; }string FileName { get; }Stream OpenReadStream();void CopyTo(Stream target);Task CopyToAsync(Stream target, CancellationToken cancellationToken = null); }

后臺控制器關于上傳的Action方法進行如下定義:

[HttpPost("UploadFiles")]public async Task<IActionResult> Post(List<IFormFile> files){long size = files.Sum(f => f.Length);// full path to file in temp locationvar filePath = Path.GetTempFileName();foreach (var formFile in files){if (formFile.Length > 0){using (var stream = new FileStream(filePath, FileMode.Create)){await formFile.CopyToAsync(stream);}}}return Ok(new { count = files.Count, size, filePath });}

為了很清楚地上傳文件所在目錄,我們將官網例子進行一下改造。

public IActionResult UploadFiles(List<IFormFile> files){long size = 0;foreach (var file in files){//var fileName = file.FileName;var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');fileName = hostingEnv.WebRootPath + $@"\{fileName}";size += file.Length;using (FileStream fs = System.IO.File.Create(fileName)){file.CopyTo(fs);fs.Flush();}}ViewBag.Message = $"{files.Count}個文件 /{size}字節上傳成功!";return View();}

如上通過注入? private IHostingEnvironment hostingEnv;?來獲取網站根目錄路徑。在前臺表單中請求action方法用渲染的方式,如下:

<form method="post" enctype="multipart/form-data" asp-controller="Upload" asp-action="UploadFiles"> </form>

當然別忘記添加TagHelper:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

成功上傳我們顯示上傳字節大小,如下:

上傳的文件在網站根目錄下我們能夠看到,如下:

上述我們只是牛刀小試通過表單提交,接下來我們進行拓展通過Ajax來提交。我們將表單類型submit修改為button,如下:

<div class="row"><div class="form-group"><div class="col-md-10"><p>使用表單上傳多個文件</p><input type="file" id="files" name="files" multiple />@ViewBag.Message</div></div></div><div class="row"><div class="form-group"><div class="col-md-10"><input type="button" id="upload" class="btn btn-success" style="cursor:pointer;width:100px;" value="上傳" /></div></div></div>

我們通過FormData對象來獲取文件從而進行Ajax提交,如下:

$(function () {$("#upload").click(function (evt) {var fileUpload = $("#files").get(0);var files = fileUpload.files;var data = new FormData();for (var i = 0; i < files.length ; i++) {data.append(files[i].name, files[i]);}$.ajax({type: "POST",url: "/Upload/UploadFiles",contentType: false,processData: false,data: data,success: function (message) {alert(message);},error: function () {alert("上傳文件出現錯誤!");}});});});

此時后臺則需要進行略微修改,我們不再需要IFormFile接口來獲取文件,通過請求中的表單獲取,如下:

public IActionResult UploadFiles(){long size = 0;var files = Request.Form.Files;foreach (var file in files){//var fileName = file.FileName;var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');fileName = hostingEnv.WebRootPath + $@"\{fileName}";size += file.Length;using (FileStream fs = System.IO.File.Create(fileName)){file.CopyTo(fs);fs.Flush();}}ViewBag.Message = $"{files.Count}個文件 /{size}字節上傳成功!";return View();}

到這里關于ASP.NET Core MVC中的上傳就告一段落,還是比較簡單但是算是比較常見的需求。

導入、導出Excel

項目中需要用到批量導入和導出于是進行了一點研究,.net core剛出世時還未有對于.net core中Excel的導出,但是見過園中有熱心園友分享并制作了.net core中導出Excel,但是博主發現在2月19號有老外已針對.net core的Excel導出和導入目前版本為1.3基于EPPlus,功能和EPPlus差不多,不過是移植到了.net core中,下面我們一起來看看。首先我們下載EPPlus.Core程序包,如下:

我們直接上導出代碼:

[HttpGet][Route("Export")]public string Export(){string sWebRootFolder = _hostingEnvironment.WebRootPath;string sFileName = @"Jeffcky.xlsx";string URL = string.Format("{0}://{1}/{2}", Request.Scheme, Request.Host, sFileName);FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));if (file.Exists){file.Delete();file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));}using (ExcelPackage package = new ExcelPackage(file)){// add a new worksheetExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Jeffcky");//sheet headerworksheet.Cells[1, 1].Value = "ID";worksheet.Cells[1, 2].Value = "Name";worksheet.Cells[1, 3].Value = "Age";//Add valuesworksheet.Cells["A2"].Value = 1000;worksheet.Cells["B2"].Value = "Jeffcky1";worksheet.Cells["C2"].Value = 18;worksheet.Cells["A3"].Value = 1001;worksheet.Cells["B3"].Value = "Jeffcky2";worksheet.Cells["C3"].Value = 19;package.Save(); //Save the workbook. }return URL;}

?

這里我們進行統一封裝下來進行導出只需要設置導出屬性和列表數據即可,如下:

public IActionResult Export(){var properties = new PropertyByName<Person>[]{new PropertyByName<Person>("Id",d=>d.Id),new PropertyByName<Person>("Name",d=>d.Name),new PropertyByName<Person>("Age",d=>d.Age)};var list = new List<Person>(){new Person() {Id=1,Name="Jeffcky1",Age=18 },new Person() {Id=2,Name="Jeffcky2",Age=19 },new Person() {Id=3,Name="Jeffcky3",Age=20 },new Person() {Id=4,Name="Jeffcky4",Age=21 },new Person() {Id=5,Name="Jeffcky5",Age=22 }};var bytes = _ExportManager.ExportToXlsx<Person>(properties, list);return new FileContentResult(bytes, MimeTypes.TextXlsx);}

?

說完導出我們再來看導入,我們來讀取剛剛導入的數據返回到頁面上:

public string Import(){string sWebRootFolder = _hostingEnvironment.WebRootPath;string sFileName = @"Jeffcky.xlsx";FileInfo file = new FileInfo(Path.Combine(sWebRootFolder, sFileName));try{using (ExcelPackage package = new ExcelPackage(file)){StringBuilder sb = new StringBuilder();ExcelWorksheet worksheet = package.Workbook.Worksheets[1];int rowCount = worksheet.Dimension.Rows;int ColCount = worksheet.Dimension.Columns;bool bHeaderRow = true;for (int row = 1; row <= rowCount; row++){for (int col = 1; col <= ColCount; col++){if (bHeaderRow){sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");}else{sb.Append(worksheet.Cells[row, col].Value.ToString() + "\t");}}sb.Append(Environment.NewLine);}return sb.ToString();}}catch (Exception ex){return "Some error occured while importing." + ex.Message;}}

此時我們再來對導入進行統一封裝下,如下:

[HttpGet][Route("Import")]public void Import(){string sWebRootFolder = _hostingEnvironment.WebRootPath;string sFileName = @"Jeffcky.xlsx";FileStream fs = new FileStream(Path.Combine(sWebRootFolder, sFileName), FileMode.Open, FileAccess.Read, FileShare.Read);var list = _ImportManager.ImportPersonFromXlsx(fs);}

導入大概就介紹完畢了,要我說真正的難點不在于利用EPPlus導入和導出,難點在于批量導入,批量進行導入后對數據格式的檢驗,如果給定一個導入模板,然后再導入批量數據怎么確保用戶給的數據格式完全是正確的以及數據沒有重復的校驗,這兩天基本上是完成了批量的導入,大概分為:數據必填項的校驗、數據格式的校驗、數據庫是否存在數據的校驗、數據導入部分導入失敗返回格式的用戶體驗。當利用NPOI、EPPlus來導入和導出這樣的功能再簡單不過了,但是如果遇到了不同的場景怎么讓用戶體驗更好的使用這是一個問題,如果數據導入失敗我們怎么去提示用戶呢,還有如果Excel中有下拉框和合并的單元格數據我們怎么去獲取這又是一個問題,可能很多簡歷上寫著會利用NPOI和EPPlus的導入和導出,其實沒什么看頭,二者不過是一個工具罷了,如何利用工具去應用到復雜的場景并舉例那才算是高級的東西。

總結

本節我們稍微介紹了.net core中的下載、導入和導出,如果有可能的話后續會給出關于EPPlus中高級的知識,比如如上提出的獲取合并列數據還有獲取圖片等等,我們下節再會,哦,關于SQL Server有時間會定期進行更新,see u。

轉載于:https://www.cnblogs.com/CreateMyself/p/6464199.html

總結

以上是生活随笔為你收集整理的ASP.NET Core MVC上传、导入、导出知多少的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 污污内射在线观看一区二区少妇 | 天天干天天干 | 国产黄色网址在线观看 | 日韩电影在线观看一区 | 综合xx网 | 黄色三级免费观看 | 人妻aⅴ无码一区二区三区 阿v免费视频 | 欧美在线国产 | 最新理伦片eeuss影院 | 久久久精品人妻av一区二区三区 | 日韩熟女精品一区二区三区 | 麻豆一区二区三区精品视频 | 国产真人做爰视频免费 | 日韩色综合| 日韩在线三区 | 国产精品电影网 | 成人手机在线视频 | 日本不卡视频一区二区三区 | 一级片av| 91色啪 | 女生被草| 欧洲精品在线观看 | 久久国产加勒比精品无码 | 久久婷婷色综合 | 欧美亚洲日本国产 | 色福利视频 | 国产免费av一区二区 | 一级黄色小视频 | 丝袜调教91porn | 国产免费叼嘿网站免费 | 关之琳三级全黄做爰在线观看 | zoo性欧美| 99久视频| 成年人的毛片 | 在线va视频 | 少妇一晚三次一区二区三区 | 免费无码又爽又黄又刺激网站 | 亚洲婷婷网 | 国产xxxx做受性欧美88 | 日本一区二区人妻 | 精品一区二区三区人妻 | 日日夜夜操操 | 欧美乱妇在线观看 | 成年人黄色免费网站 | 高清日韩 | 特级新鲜大片片 | 精品久久久免费 | 日韩欧美中文字幕在线视频 | 成人黄色三级 | 日本久久久久久久久 | 欧美日韩69 | 国产福利视频在线观看 | 国产精品午夜久久 | 国产中文字幕网 | 狠狠操狠狠 | 精品国自产拍在线观看 | 日韩欧美在线中文字幕 | 黄色大片黄色大片 | 国产一区二区亚洲 | 亚洲29p| 男人天堂网在线视频 | 超碰cc| 国产精品一区二区免费 | 美女福利片 | 欧美 日韩 国产 在线 | 1024视频污| 国产精品第六页 | 天天干天天摸 | 欧美视频一区在线观看 | 色就是色综合 | 反差在线观看免费版全集完整版 | 波多野结衣国产 | 日韩一区二区三区在线播放 | 蜜臀av在线免费观看 | 人妻精品久久久久中文字幕69 | 久久久久久久爱 | 中国黄色网页 | 九九色九九| 亚洲午夜18毛片在线看 | 黄色网久久 | 国产91精品一区二区 | 天堂成人av | 中国女人特级毛片 | 国产精品美女久久久网av | 波多野结衣毛片 | 国产资源网 | 精品无码av一区二区三区 | 中文字幕一区二区三区av | 老师的肉丝玉足夹茎 | 尤物视频在线播放 | 伊人亚洲天堂 | 婷婷丁香综合网 | www.狠狠插 | 成人自拍网站 | 一级片www | 中文字幕电影一区二区 | 国产黄色片免费看 | 国产农村妇女毛片精品久久麻豆 | 一本色道久久综合亚洲精品图片 |