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文 ...
随机推荐
- Mockito学习1
Mockito学习1 junitmaven软件测试框架项目管理 Mockito是一个流行的Mocking框架.它使用起来简单,学习成本很低,而且具有非常简洁的API,测试代码的可读性很高.因此它十分 ...
- 博客写作的Checklist
Checklist 1.不要发明术语. 2.不要使用指代不清的代词.如:我,他. 3.不要使用错误的承前省. 4.不要使用口语. 5.给出结论之前,先交代背景. 6.站立会议报告中应有燃尽图. 7.燃 ...
- spring学习七 spring和dynamic project进行整合
spring和web项目进行整合,其实就是在项目启动时,就创建spring容器,然后在servlet中使用spring容器进行开. 注意:为了页面可以访问到servlet,因此servlet必须放进t ...
- 2018.11.07 NOIP模拟 分糖果(贪心)
传送门 考虑 n = 2 时的情况:假定两个人分别为(a, b),(c, d),则当且仅当min(a,d) ≤ min(b,c)时,把(a, b)放在前面更优,否则把(c, d)放在前面更优 然后把n ...
- 2018.11.02 NOIP训练 停车场(线段树)
传送门 这是一道困饶了我一年的题. 其实就是去年去NOIP提高组试水的时候考的模拟题 但当时我水平不够,跟ykykyk一起杠了一个下午都没调出来. 今天终于AAA了. 其实就是一个维护最长连续0101 ...
- 利用xshell远程连接centos安装oracle11g时在图形界面登录
1.首先给centos安装桌面环境.( yum groupinstall ‘GNOME Desktop’) 2.安装Xmanager软件 3.打开xshell,新建连接 填好主机和名称后,点击左侧连接 ...
- jmeter读取csv文件
操作步骤: 1.读取csv文件 2.编辑httpSampler
- 解决linux系统CentOS下调整home和根分区大小
目标:将VolGroup-lv_home缩小到20G,并将剩余的空间添加给VolGroup-lv_root 1.首先查看磁盘使用情况 [root@localhost ~]# df -h 文件系统 ...
- typecho 文章归档调用
<style> div { display: block; } .title { position: relative; margin: 0; line-height: 32px; fon ...
- user表中存在多条相同user不同host用户信息时MySQL该匹配哪条记录登录?
问题: 当用户名相同,但主机名不同的多条记录.用户由不同主机登录时,选择使用那条记录来验证,数据库版本为:5.6.25 如:IP为192.168.141.241 hostname为vhost02主机上 ...