ASP.NET CORE之上传文件夹
最近闲余时间在做一个仿百度网盘的项目,其中就有一个上传文件夹的功能。查了下网上好像对这个问题的描述比较少,所以在此记录一下。
1、网上找来找去发现webkitdirectory这个东西,H5的一个新的属性吧,就是在文件控件上标记这个属性可以获取到选择文件夹里的所有文件的。
<input type="file" name="file" webkitdirectory>
特地看了下百度网盘网页版也是使用的这个属性,但是网上都说该属性只有chrome浏览器支持。然后我就不信,用360浏览器试了试还是可以用。结果发现360有两种模式(极速模式和兼容模式),极速模式是以Blink(Webkit)为内核的浏览模式,而chrome好像也是使用的这个内核。所以说我刚刚试的也可以用,但是切换到兼容模式则不能用了(IE内核)。
2、言归正传,直接贴代码吧。
<input type="file" name="file" webkitdirectory>
<button id="upload" type="button" onclick="Upload()" >上传</button>
var files = [];
$(document).ready(function () {
$('input').change(function () {
files = this.files;
})
}); function Upload() {
var data = new FormData();
debugger
for (var i = 0; i < files.length; i++) {
data.append('file', files[i]);
}
var path = files[0].webkitRelativePath;
$.ajax({
type: "post",
url: "/home/UpLoad",
data: data,
contentType: false,
processData: false,
success: function (data) {
console.log(data);
}
})
}
最后是控制器
[HttpPost]
public IActionResult UpLoad()
{
var files = Request.Form.Files;
string rootpath = _hostingEnvironment.WebRootPath + @"\Files"; try
{
foreach (var file in files)
{
string[] arrpath = file.FileName.Split(@"/");
string dirpath = "";//该文件的所在目录(包括一、二级目录)
string filename = arrpath[arrpath.Length - ].ToString();//该文件名
for (int i=;i<arrpath.Length;i++)
{
if(i==arrpath.Length-)
{
break;
}
dirpath += arrpath[i]+@"/";
}
DicCreate(Path.Combine(rootpath, dirpath));//不存在则创建该目录 string filepath = Path.Combine(rootpath, file.FileName);
using (var addFile = new FileStream(filepath, FileMode.OpenOrCreate))
{
if (file != null)
{
file.CopyTo(addFile);
}
else
{
Request.Body.CopyTo(addFile);
}
addFile.Close();
}
} return Ok(new
{
success = true,
message = "上传成功"
});
}
catch(Exception ex)
{
return Ok(new
{
success = false,
message = ex.Message
});
}
} /// <summary>
/// 文件目录如果不存在,就创建一个新的目录
/// </summary>
/// <param name="path"></param>
private void DicCreate(string path)
{
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
}
3、说明下,后端接收到的files是选择文件夹里所有文件的集合。

比如我这里测试使用的是选中一个名为新建文件夹的文件夹,然后该文件夹里有两张图片和一个子文件夹,子文件夹里也是一张图片。
所有我获取到的files是count为3的集合,文件名分别为 新建文件夹/1.jpg、新建文件夹/2.jpg、新建文件夹/新建文件夹/8.jpg(这个是在二级文件夹里的)。
大概的思路就是:获取到文件集合后遍历,然后取得该文件所在的文件夹,如果服务器上不存在该文件夹则创建,最后上传文件。
当然我代码只是写了最基本的实现,具体还有些验证或者业务逻辑还得具体分析。
然后其他就不多说了吧,不太明白的调试下代码差不多就懂了,如有错误,望指出。
ASP.NET CORE之上传文件夹的更多相关文章
- asp.net FileUpload上传文件夹并检测所有子文件
1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...
- asp.net 怎么上传文件夹啊,不传压缩包!
ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现. 下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压. ASP.NE ...
- ASP.NET Core 上传文件到共享文件夹
参考资料:ASP.NET 上传文件到共享文件夹 创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 一.配置上传文件相关参数并读取 ...
- asp.net能否上传文件夹下所有文件
HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...
- asp.net 怎么上传文件夹啊,不传压缩包
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- ASP.NET Core 中的文件上传
ASP.NET Core上传文件 ASP.NET Core使用IFormFile来读取上传的文件内容,然后将数据写入到磁盘或其它存储空间. 添加FileUpload模型,用来接收上传的文件内容. pu ...
- asp.net core配置下载文件
asp.net core的wwwroot文件夹下默认时保存静态文件的地方,外面可以直接访问,但是如果是一些无法识别的后缀文件,如(.apk),会报错404 如果想要实现下载这些文件,在配置静态文件中间 ...
- asp.net上传文件夹权限配置以及权限配置的分析
切记:一定要禁止给公共上传文件夹的权限设置为everyone,且为完全控制!除非你这个文件夹属于内部操作的,那这样做是允许,其余情况一律禁止! 基本的文件上传文件夹权限配置: 1.在需要配置上传的文件 ...
- MVC文件上传05-使用客户端jQuery-File-Upload插件和服务端Backload组件自定义上传文件夹
在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 MVC文 ...
随机推荐
- [C#.Net]KeyDown(KeyUp)和KeyPress的区别
在keyDown事件里使用keyValue:在keyPress事件里使用keyChar. keyValue转换keyChar:(char)keyValue 验证只有数字和backSpace e.han ...
- IDEA导入MySQL包
点击[Project Structure] 点击[Modules] 在点击下面的界面 找到自己下载的MySQL包就OK了
- hadoop报错:java.io.IOException(java.net.ConnectException: Call From xxx/xxx to xxx:10020 failed on connection exception: java.net.ConnectException: 拒绝连接
任务一直报错 现象比较奇怪,部分任务可以正常跑,部分问题报错 报错信息如下: Ended Job = job_1527476268558_132947 with exception 'java.io. ...
- 2018.12.14 codeforces 922E. Birds(分组背包)
传送门 蒟蒻净做些水题还请大佬见谅 没错这又是个一眼的分组背包. 题意简述:有n棵树,每只树上有aia_iai只鸟,第iii棵树买一只鸟要花cic_ici的钱,每买一只鸟可以奖励bbb块钱,从一棵 ...
- FASTDFS 安装与开发
FASTDFS介绍 FastDFS开源地址:https://github.com/happyfish100 简介 FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存 ...
- Win7 VS2013环境编译Squirrel 3.0.7
Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...
- CentOS 7 / RHEL 7 运行单用户模式进行root的密码重置
步骤一,开机时随便按下键盘,进入以下菜单 步骤二: 选择第一项,按e键进行修改 步骤三,定位到 ro( linux 16 or linuxefi ) 步骤四:把ro改成 “rw init=/sys ...
- user表中存在多条相同user不同host用户信息时MySQL该匹配哪条记录登录?
问题: 当用户名相同,但主机名不同的多条记录.用户由不同主机登录时,选择使用那条记录来验证,数据库版本为:5.6.25 如:IP为192.168.141.241 hostname为vhost02主机上 ...
- VHDL基础1
Description Structure 一个可综合的VHDL描述中一般由3部分组成:LIBRARY declarations.ENTITY.ARCHITECTURE Library(库)用来设计重 ...
- 通过request获取网页资讯 通过BeautifulSoup剖析网页元素
import requests newsUrl ='http://news.sina.com.cn/china/' res = requests.get(newsUrl) res.encoding ...