HTML5技术

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

字号+ 作者:H5之家 来源:H5之家 2017-03-02 18:01 我要评论( )

前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天在研究批量导入功能,本节顺便简单搞搞导入、导出,等博主弄妥当了再来和大家一并分享。 .NET Core MVC上传 首先我们来看看官网的上传的例子,再然后进行拓展训练,官网的表单是这样的。

前言

本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天在研究批量导入功能,本节顺便简单搞搞导入、导出,等博主弄妥当了再来和大家一并分享。

.NET Core MVC上传

首先我们来看看官网的上传的例子,再然后进行拓展训练,官网的表单是这样的。

<form method=enctype=asp-controller=asp-action=> <div > <div > <p>Upload one or more files using this form:</p> <input type=name=multiple /> </div> </div> <div > <div > <input type=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()] public async Task<IActionResult> Post(List<IFormFile> files) { long size = files.Sum(f => f.Length); 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) { fileName = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim(); fileName = hostingEnv.WebRootPath + $; size += file.Length; using (FileStream fs = System.IO.File.Create(fileName)) { file.CopyTo(fs); fs.Flush(); } } ViewBag.Message = $; return View(); }

如上通过注入  private IHostingEnvironment hostingEnv; 来获取网站根目录路径。在前台表单中请求action方法用渲染的方式,如下:

<form method=enctype=asp-controller=asp-action=> </form>

当然别忘记添加TagHelper:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

成功上传我们显示上传字节大小,如下:

上传的文件在网站根目录下我们能够看到,如下:

上述我们只是牛刀小试通过表单提交,接下来我们进行拓展通过Ajax来提交。我们将表单类型submit修改为button,如下:

<div > <div > <div > <p>使用表单上传多个文件</p> <input type=name=multiple /> @ViewBag.Message </div> </div> </div> <div > <div > <div > <input type=id==style=value=/> </div> </div> </div>

我们通过FormData对象来获取文件从而进行Ajax提交,如下:

$(function () { $().click(function (evt) { ).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: , url: , 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) { fileName = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim(); fileName = hostingEnv.WebRootPath + $; size += file.Length; using (FileStream fs = System.IO.File.Create(fileName)) { file.CopyTo(fs); fs.Flush(); } } ViewBag.Message = $; return View(); }

到这里关于ASP.NET Core MVC中的上传就告一段落,还是比较简单但是算是比较常见的需求。

导入、导出Excel

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 如何一秒钟从头构建一个 ASP.NET Core 中间件 - Savorboard

    如何一秒钟从头构建一个 ASP.NET Core 中间件 - Savorboard

    2017-02-23 16:01

  • 用agular2做文件上传功能杂记-遁地龙卷风 - 遁地龙卷风

    用agular2做文件上传功能杂记-遁地龙卷风 - 遁地龙卷风

    2017-02-14 15:00

  • ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录 - JeffckyWang

    ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录 - Jeffcky

    2017-02-02 12:07

  • 棒!使用.NET Core构建3D游戏引擎 - Savorboard

    棒!使用.NET Core构建3D游戏引擎 - Savorboard

    2017-01-29 08:03

网友点评
7