ajax上传netcore插件,AspNetCore 文件上传(模型绑定、Ajax) 两种方式 get到了吗?

就目前来说,ASP.NET Core2.1了,已经相当成熟了,希望下个项目争取使用吧!!

上传文件的三种方式("我会的,说不定还有其他方式")

模型绑定

Ajax

WebUploader

一。模型绑定

官方机器翻译的地址:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads,吐槽一下,这翻译的啥玩腻啊。。。

Form表单多个上传文件:

其中,asp-controller和asp-action,(这个是TagHelper的玩法)是我们要访问的控制器和方法,不懂taghelper的可以看一下我关于aspnetcore的taghelper的相关文章zara说taghelper

给我们的input标签加上 multiple 属性,来支持多文件上传.

创建一个控制器,我们编写上传方法如下:

public async Task FileSave(List files)

{

var files = Request.Form.Files;

long size = files.Sum(f => f.Length);

string webRootPath = _hostingEnvironment.WebRootPath;

string contentRootPath = _hostingEnvironment.ContentRootPath;

foreach (var formFile in files)

{

if (formFile.Length > )

{

string fileExt = GetFileExt(formFile.FileName); //文件扩展名,不含“.”

long fileSize = formFile.Length; //获得文件大小,以字节为单位

string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机生成新的文件名

var filePath = webRootPath +"/upload/" + newFileName;

using (var stream = new FileStream(filePath, FileMode.Create))

{

await formFile.CopyToAsync(stream);

}

}

}

return Ok(new { count = files.Count, size });

}

这里我们采用Asp.NET Core的新接口IFormFile,  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);

}

上面的代码使用了IHostingEnvironment来获取项目的根目录地址.

构造函数注入的代码如下:

private readonly IHostingEnvironment _hostingEnvironment;

public UpLoadFileController(IHostingEnvironment hostingEnvironment)

{

_hostingEnvironment = hostingEnvironment;

}

二。ajax上传

前台代码:

function doUpload() {

var formData = new FormData($("#uploadForm")[0]);

$.ajax({

url: '@Url.Action("FileSave")',

type: 'POST',

data: formData,

async: false,

cache: false,

contentType: false,

processData: false,

success: function (returndata) {

alert(returndata);

},

error: function (returndata) {

alert(returndata);

}

});

}

后台代码和模型绑定有点区别,不要写参数的了,获取直接reques里面的了

public async Task FileSave()

{

var date = Request;

var files = Request.Form.Files;

long size = files.Sum(f => f.Length);

string webRootPath = _hostingEnvironment.WebRootPath;

string contentRootPath = _hostingEnvironment.ContentRootPath;

foreach (var formFile in files)

{

if (formFile.Length > 0)

{

string fileExt = GetFileExt(formFile.FileName); //文件扩展名,不含“.”

long fileSize = formFile.Length; //获得文件大小,以字节为单位

string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机生成新的文件名

var filePath = webRootPath +"/upload/" + newFileName;

using (var stream = new FileStream(filePath, FileMode.Create))

{

await formFile.CopyToAsync(stream);

}

}

}

return Ok(new { count = files.Count, size });

}

改为直接从Request.Form.Files中获取文件集合.

egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名

egg.js 通过 form 和 ajax 两种方式上传文件并自定义目录和文件名 评论:10 · 阅读:8437· 喜欢:0 一.需求 二.CSRF 校验 三.通过 form 表单上传文件 四.通过 ...

iframe 模拟ajax文件上传and formdata ajax 文件上传

对于文件上传 有好多种方式,一直想总结 文件上传的方法 今天就来写下 iframe  的文件上传的代码 本人语言表达能里有限,不多说了 直接上代码. 首先看 总体页面. 总共就三个文件. 实际上也就是 ...

GIT将本地项目上传到Github(两种简单、方便的方法)

GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...

【代码笔记】iOS-向服务器传JSON数据的两种方式

一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

Django中的文件上传和原生Ajax

概述 Django中的上传有3种方案: form 表单常规上传,但点击提交后会自动刷新页面 Ajax 上传,不刷新页面,(分为原生ajax上传和jQuery上传),IE7以上不兼容 iframe 上传 ...

Day21 Django之Form文件上传、原生Ajax和实现抽屉实例

一.Form文件上传 """ Django settings for prev_chouti project. Generated by 'django-admin st ...

springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp ...

文件上传之伪Ajax篇

iframe上传文件 接上篇:Ajax的最大特点就是无刷新(实际上是跳转),因此楼主想通过模拟Ajax的方式进行文件上传,也就是iframe上传文件 话不多说,直接上代码 HTML:

随机推荐

python 学习(二)--关于类

1.没有权限控制,在类方法或变量前加 "__" 两下划线,则变为"私有"变量(实际通过___ 可以访问) 2.类 ...

crawler: 爬虫的基本结构

目前我所知道的爬虫在获取页面信息上,分为静态爬虫和动态爬虫:静态爬虫主要用于获取静态页面,获取速度一般也比较快:但是现在很多网站的页面都是采用动态页面,当我们用爬虫去获取信息的时候,页面的信息可能还没 ...

Java代码操作Redis的sentinel和Redis的集群Cluster操作

总共四台机器,crxy99,crxy98分别是主节点和从节点.   crxy97和crxy96是两个监控此主从架构的sentinel节点. 看代码: import org.junit.Test; im ...

PageView

auto pageview = PageView::create();     pageview->setContentSize(Size(480.0f, 320.0f));     p ...

CF#52 C Circular RMQ (线段树区间更新)

Description You are given circular array a0, a1, ..., an - 1. There are two types of operations with ...

Java WEB工程搭建UEditor

1. ueditor简介: UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... UEdito ...

一起写框架-控制反转(Ioc)概述(二)

控制反转概述 控制反转(Inversion of Control,英文缩写为IoC),就是将代码的调用的控制权,由调用方转移给被调用方. 如图:修改代码A类的代码,才能将B类的对象换成C类.代码的控制 ...

C - The C Answer (2nd Edition) - Exercise 1-7

/* Write a program to print the value of EOF. */ #include main() { printf("EOF ...

启动tomcat时,一直卡在Deploying web application directory这块的解决方案

本来今天正常往服务器上扔一个tomcat 部署一个项目的, 最后再启动tomcat 的时候 发现项目一直都访问不了,看了一下日志: [root@iz8vbdzx7y7owm488t4d89z bin] ...

改变UITableView选中行高亮的颜色

UIView *backView = [[UIView alloc] initWithFrame:self.contentView.frame]; backView.backgroundColor = ...

你可能感兴趣的:(ajax上传netcore插件)