最近闲余时间在做一个仿百度网盘的项目,其中就有一个上传文件夹的功能。查了下网上好像对这个问题的描述比较少,所以在此记录一下。

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();debuggerfor (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 - 1].ToString();//该文件名for (int i=0;i<arrpath.Length;i++){if(i==arrpath.Length-1){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(这个是在二级文件夹里的)。

大概的思路就是:获取到文件集合后遍历,然后取得该文件所在的文件夹,如果服务器上不存在该文件夹则创建,最后上传文件。

当然我代码只是写了最基本的实现,具体还有些验证或者业务逻辑还得具体分析。

然后其他就不多说了吧,不太明白的调试下代码差不多就懂了,如有错误,望指出。

转载于:https://www.cnblogs.com/lyps/p/10303662.html

ASP.NET CORE之上传文件夹相关推荐

  1. ASP.NET Core 上传文件 图片上传

    在 ASP.NET Core 中上传文件 vs2019 选择文件后,调试停止问题 工具 -> 选项 -> 项目和解决方案 -> Web项目 -> 浏览器窗口关闭时停止调试器(s ...

  2. asp.net FileUpload上传文件夹并检测所有子文件

    1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...

  3. 在 ASP.NET Core 中上传文件

    简介 文件上传是指将媒体文件(本地文件或网络文件)从客户端上传至服务器存储.ASP.NET Core 支持使用缓冲的模型绑定(针对较小文件)和无缓冲的流式传输(针对较大文件)上传一个或多个文件.缓冲和 ...

  4. asp.net core中上传文件的解决方案

    上传是经常使用的功能,每遇到一个新项目,频繁写重复代码不是什么好事,推荐一个上传类库,仅通过配置文件,即可拥有上传功能和下载控制,RsCode.Storage是专门解决上传这个问题的.它分两个版本:本 ...

  5. python上传图片到服务器_Flask入门之上传文件到服务器的方法示例

    今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py # coding:utf-8 from flask import Flask,render_templa ...

  6. ASP.NET Core launchsettings.json文件(8)《从零开始学ASP.NET CORE MVC》:

    本文出自<从零开始学ASP.NET CORE MVC> 推荐文章:ASP.NET Core 进程外(out-of-process)托管 ASP.NET Core launchsetting ...

  7. Flask入门之上传文件到服务器

    https://www.cnblogs.com/wongbingming/p/6802660.html flask 文件的上传下载和excel操作 Flask入门之上传文件到服务器 今天要做一个简单的 ...

  8. Flask入门之上传文件到本地服务器

    Flask入门之上传文件到服务器 今天要做一个简单的页面,可以实现将文件 上传到服务器(保存在指定文件夹) #Sample.py 1 # coding:utf-8 2 3 from flask imp ...

  9. js使用input上传文件夹、拖拽上传文件夹并将文件夹结构展示为树形结构

    一.实现效果 左侧区域支持选择一个系统中的文件夹,或者将文件夹拖拽到这个区域进行上传,右侧区域可以将文件夹的结构展示为树形结构. 二.代码实现 由于需要使用树形插件zTree,这个插件是依赖于jque ...

最新文章

  1. easyexcel工具类_阿里巴巴程序员常用的 15 款开发者工具
  2. 在linux下使用ZThread
  3. 利用条件GANs的pix2pix进化版:高分辨率图像合成和语义操作 | PaperDaily #23
  4. 五、案例-指令参考-freemarker指令、表达式
  5. inline 内联函数详解 内联函数与宏定义的区别
  6. LeetCode 874. 模拟行走机器人(set)
  7. 笔记本电脑键盘切换_真想本小新13pro搭档,笔记本电脑周边好物清单推荐
  8. android 底部菜单
  9. 计算机语言系统不支持,win7电脑安装IE8出现“此安装不支持您的操作系统的当前语言”怎么办...
  10. Laravel5.2之模型关联预加载
  11. php按按字符串长度分割,支持中文的PHP按字符串长度分割成数组代码_PHP
  12. Python实现七段数码管时钟(动态刷新版)
  13. C程序设计——打飞机
  14. 第三方Charts绘制图表四种形式:饼状图,雷达图,柱状图,直线图
  15. 当今社会到底更需要专才还是通才
  16. HarmonyOS APP开发入门3——组件(二 Text组件)
  17. 计算机基础教程 试题,《计算机基础教程》考试试题及答案
  18. 怎么用思维导图做会议纪要?MindNow来教你
  19. Origin设置线条颜色和符号颜色一致
  20. 搭建一个属于自己的独立线上商城网站

热门文章

  1. java static null,我们可以在Java中使用null对象调用静态方法吗?如果是这样,怎么样?...
  2. oracle pl sql示例,oracle PL SQL学习案例(一)
  3. 原理竟然是这!2021年字节跳动74道高级程序员面试
  4. springboot数据源不正确_SpringBoot整合多数据源的巨坑!!!
  5. 单个正态总体均值的区间估计_考研数学闭关修炼习题讲解(3536)统计、估计与检验...
  6. linux批量执行命令脚本,2.3-命令批量执行脚本
  7. Springboot解决IDEA读取properties配置文件的中文乱码问题
  8. 分峰截幅c语言算法,面向桥梁健康监测的复合传感技术研究
  9. “三电一兽”竞争格局将打破,网络营销外包下搜电开启高效运营
  10. 三点提升关键词排名的写作技巧