日韩性视频-久久久蜜桃-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上传、导入、导出知多少的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲免费视频网站 | 一级性生活免费视频 | 亚洲二区在线播放视频 | 黄色1级毛片 | 国产农村妇女毛片精品久久麻豆 | 免费人成网站 | 曰本无码人妻丰满熟妇啪啪 | 日本人与黑人做爰视频 | 欧美一区二区三区国产 | 日韩av高清无码 | 精品无码久久久久久久久成人 | 国产98色在线 | 日韩 | 农村村妇真实偷人视频 | 国产福利一区二区视频 | 午夜精品一区二区三区在线播放 | 国产精品久久久久久久久久久久久久久 | 欧美成人精品欧美一级乱黄 | 视频黄色免费 | 91亚洲视频在线观看 | 国产麻豆成人精品av | 国产久草视频 | 成人在线观看www | 精品777 | 中文字幕88| 久久精品一二三 | 亚洲第1页 | 狠狠操欧美 | 午夜精品久久久久久久四虎美女版 | 美日韩久久 | 91性高潮久久久久久久 | 台湾佬中文字幕 | 麻豆传媒网址 | 亚洲天天综合 | 国产女人18毛片水真多 | 久久一视频 | 欧美亚洲少妇 | 成人精品一区二区三区在线 | 日韩国产一区 | xxx久久| 青青草原免费观看 | 日本精品不卡 | 日韩av综合网 | 另类三区 | 午夜国产一区 | 男人av网站 | 老熟女高潮一区二区三区 | 国产精品视频免费网站 | 久久青娱乐 | 日韩一区二区a片免费观看 伊人网综合在线 | 亚洲在线观看免费视频 | 三级视频网 | 老牛影视av老牛影视av | 婷婷狠狠| 韩国美女啪啪 | 亚洲综合一区在线观看 | 成人免费黄色小视频 | 狠狠爱综合网 | 毛片av免费 | 97se亚洲综合| 亚洲αv| 亚洲天堂视频网 | 新婚之夜玷污岳丰满少妇在线观看 | 午夜毛片 | 国产亚洲AV无码成人网站在线 | 夜夜操夜夜爱 | 欧美浪妇xxxx高跟鞋交 | 日韩av网页 | 亚洲香蕉网站 | 欧美激情第1页 | 国产精品久久久久久久久免费看 | 青草视屏| 一卡二卡三卡在线视频 | 国产精品你懂得 | 狼人综合网| 干夜夜| 一个人在线观看www软件 | 国产网红女主播精品视频 | 国产亚洲精品久 | 午夜三区 | 进去里视频在线观看 | 国产成人av一区二区三区 | 中文字幕一区二区三区手机版 | 四虎最新站名点击进入 | 777奇米四色 | 久久久久久久久网站 | 亚洲一区二区影视 | 综合精品| 精人妻无码一区二区三区 | 国产一级淫片a视频免费观看 | 午夜精品少妇 | www夜色| 樱花视频在线观看 | 久久精品久久久精品美女 | 久久99精品久久久久久三级 | 一级淫片免费看 | 国产老妇视频 | 免费看又黄又无码的网站 | 国产成人小视频 | 香蕉视频网站入口 |