ASP.NET Core MVC上传文件
使用模型绑定上传小文件
HTML代码:
- <form method="post" enctype="multipart/form-data" asp-controller="Main" asp-action="UploadFiles">
- <div class="form-group">
- <div class="col-md-10">
- <p>使用此表单上传一个或多个文件:</p>
- <input type="file" name="files" multiple>
- </div>
- </div>
- 8 <div class="form-group">
- <div class="col-md-10">
- <input type="submit" value="上传">
- </div>
- </div>
- 13 </form>
- @ViewBag.Message
为支持文件上传,HTML 窗体必须指定 multipart/form-data 的 enctype
form表单的 enctype 属性规定了form表单数据在发送到服务器时候的编码方式
multipart/form-data:指定传输数据为二进制数据,例如图片、mp3、文件
multiple属性规定输入字段可选择多个值(支持批量上传)
上传到服务器的单个文件可使用 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);
- }
注意:切勿依赖或信任未经验证的 FileName
属性。 FileName
属性应仅用于显示目的。
在控制器的构造函数中注入 IHostingEnvironment 来获取网站根目录路径:
上传方法:
- public IActionResult UploadFiles(List<IFormFile> files)
- {
- long size = ;//文件大小
- foreach (var file in files)
- {
- var fileName = file.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("Index");
- 17 }
使用 IFormFile
技术上传的文件在处理之前会缓存在内存中或 Web 服务器的磁盘中。 在操作方法中,IFormFile
内容可作为流访问。
运行结果:
在文件的根目录下可以看到上传的2文件:
上传成功!
以上上传功能使用表单提交,以下代码扩展使用Ajax请求提交
HTML代码:
- <div class="row">
- <div class="form-group">
- <div class="col-md-10">
- <p>上传一个或多个文件:</p>
- <input type="file" id="files" name="files" multiple />
- </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;" value="上传" />
- </div>
- </div>
- </div>
JavaScript代码:
- $(function () {
- $("#upload").click(function () {
- var fileUpload = $("#files").get(0);//获得第一个files的名称和值
- var files = fileUpload.files;//获取文件信息
- var data = new FormData();//通过FormData构造函数创建一个空对象
- for (var i = 0; i < files.length; i++) {
- data.append(files[i].name, files[i]);//通过append方法追加数据
- }
- $.ajax({
- type: "post",
- url: "/Main/UploadFiles",
- contentType: false,//不要去设置Content-Type请求头
- processData: false,//不要去处理发送的数据
- data: data,
- success: function (data) {
- alert(data.message);
- },
- error: function () {
- alert("上传文件出现错误!");
- }
- });
- });
- })
上传方法:
- public IActionResult UploadFiles()
- {
- long size = ;//文件大小
- var files = Request.Form.Files;//获取前端传过来的文件
- foreach (var file in files)
- {
- var fileName = file.FileName.Trim('"');//获取文件名
- fileName = _hostingEnv.WebRootPath + $@"\{fileName}";//指定文件上传的路径
- size += file.Length;
- using (FileStream fs = System.IO.File.Create(fileName))//创建文件流
- {
- file.CopyTo(fs);//将上载文件的内容复制到目标流
- fs.Flush();//清除此流的缓冲区并导致将任何缓冲数据写入
- }
- }
- return Json(new { message = $"{files.Count}个文件 /{size}字节上传成功!" });
- 17 }
备注:如果文件上传的大小或频率会导致应用出现资源问题,请考虑使用流式处理上传文件。
End!
ASP.NET Core MVC上传文件的更多相关文章
- 改造kindeditor支持asp.net core mvc上传文件
kindtor默认使用的上传方法是使用目录下面的一般处理程序upload_json.ashx,暂时还不支持asp.net core下的文件上传,下面放出的自定义处理上传文件的接口方法. 自定义接收上传 ...
- ASP.NET Core MVC上传、导入、导出知多少
前言 本君已成夜猫子,本节我们来讲讲ASP.NET Core MVC中的上传,这两天才研究批量导入功能,本节顺便简单搞搞导入.导出,等博主弄妥当了再来和大家一并分享. .NET Core MVC上传 ...
- asp.net core mvc上传大文件解决方案
默认上传文件大小不超过30M 第一个问题: IIS 10.0 详细错误 - 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求. 服务器上的请求筛选被配置为拒绝该请求 ...
- asp.net core分块上传文件
写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...(省略一万字,不废话).这里我没用传 ...
- asp.net MVC 上传文件 System.Web.HttpException: 超过了最大请求长度
APS.NET MVC 上传文件出现 System.Web.HttpException: 超过了最大请求长度 这个问题 原因是 默认最大上传文件大小为4096,而我提交的文件太大了. 解决方案:修改 ...
- net core分块上传文件
net core分块上传文件 写完asp.net多文件上传(http://www.cnblogs.com/bestckk/p/5987383.html)后,感觉这种上传还是有很多缺陷,于是...( ...
- Spring MVC上传文件
Spring MVC上传文件 1.Web.xml中加入 <servlet> <servlet-name>springmvc</servlet-name> <s ...
- MVC上传文件
ASP.NET MVC上传文件是必段撑握的知识.加强训练才是.以前Insus.NET曾使用第三方MyAjaxForm.js :http://www.cnblogs.com/insus/p/378548 ...
- 一、.Net Core 分块上传文件
一..Net Core 分块上传文件 一.前端实现 @* For more information on enabling MVC for empty projects, visit http://g ...
随机推荐
- JS高阶---显式原型和隐式原型
前言: 1.函数对象即函数的prototype原型属性指向原型对象,在创建函数时便存在,默认为空Object 2.实例对象的__proto__隐式原型在实例化创建实例时产生,值等于构造函数的显式pro ...
- js闭包和原型链好文
http://www.cnblogs.com/wangfupeng1988/p/3977924.html
- Appium基础:Desired Capabilities详讲
Desired Capabilities在启动session的时候是必须提供的,先看如下代码: Desired Capabilities本质上是key value的对象,他告诉appium serve ...
- python批量修改文件名(以修改图片名为例)
#coding=utf-8import sys, string, os, shutil #输入目录名和前缀名,重命名后的名称结构类似prefix_0001 def RenameFiles(srcdir ...
- leetcode14最长公共前缀
class Solution { public: string longestCommonPrefix(vector<string>& strs) { ) return " ...
- Philosopher(set 线段树合并)
直接维护乘积是肯定不可行的, 精度会爆炸, 于是我们来维护对数的和, 最后来计算最高位即可 那么转换成区间求和, 区间排序 区间排序的方式可以采用线段树维护最大递增块来解决,外层用set来维护线段树的 ...
- [LeetCode] 148. Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...
- Sentinel: 接入控制台实时查看监控数据
Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理.监控(单机和集群),规则管理和推送的功能. 比如我们之前是直接在代码中初始限流的值,接入控制台后可以直接通过控制台进行限流 ...
- Comet OJ - Contest #7 C 临时翻出来的题(容斥+状压)
题意 https://www.cometoj.com/contest/52/problem/C?problem_id=2416 思路 这里提供一种容斥的写法(?好像网上没看到这种写法) 题目要求编号为 ...
- tomcat 指定(自定义)JDK路径的两种方式
1.情景展示 tomcat7使用jdk1.7:tomcat8使用jdk1.8.两个tomcat在一台机器下同时启动,你会发现这两个tomcat使用的是一个版本的jdk, 那就是你配置过的JAVA_ ...