C#遍历文件夹后上传文件夹中所有文件错误案例分析
作者:lijiao 发布时间:2022-11-03 09:28:27
asp.net是没有直接选取文件夹的控件的,我也不知道,如果大家有的话可以一起交流下。后来我想着应该有三种方法:
①先将文件夹压缩后上传服务器,然后再服务器上解压;
②获得文件夹名及目录,然后遍历文件夹下面的文件以及子文件夹,循环上传;
③是使用AcitiveX控件。
那我果断就先通过上传对话框获得文件夹名和文件夹所在的系统文件路径,可是接下来就错愕了,一开始是想使用javascript遍历文件夹的
1 var fso = new ActiveXObject("Scripting.FileSystemObject");
2 var f = fso.GetFolder(document.all.fixfolder.value);
3 var fc = new Enumerator(f.files);
但是发现遍历不了,才得知要想创建FSO对象,操作文件,必须对该文件要有足够的权限才行,这样太麻烦了,于是我采取用C#来遍历文件夹,通过写一个ashx文件,在html里通过action将浏览的数据传送过来
以下是C#遍历文件夹之后上传文件夹下的所有文件引用片段:
<%@ WebHandler Language="C#" Class="folder" %>
using System;
using System.Web;
using System.IO;
public class folder : IHttpHandler
{
//采用递归的方式遍历,文件夹和子文件中的所有文件。
public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
HttpServerUtility Server = context.Server;
//指定输出头和编码
Response.ContentType = "text/html";
Response.Charset = "utf-8";
HttpFileCollection fs = HttpContext.Current.Request.Files;
string newFilePath = Request.Form["sPath"];
if(fs.Count>0)
{
//fs[0]对应FindFile的dirPath就是指定目录,newFilePath绝对赢svrPath就是目标目录,也就是服务器上的目录
FindFile(fs[0].ToString(), newFilePath);
}
Response.Write("<script>parent.FileUploadDeal()</script>");
}
//采用递归的方式遍历,文件夹和子文件中的所有文件。
public void FindFile(string dirPath,string svrPath) //参数dirPath为指定的目录,svrPath是目标目录
{
//目标目录,也就是服务器上的目录
string sFilePath = System.Web.HttpContext.Current.Server.MapPath(svrPath);
//string sFilePath = System.Web.HttpContext.Current.Server.MapPath(Request.Form["svrPath"]);
//创建文件夹
if (!Directory.Exists(sFilePath))
Directory.CreateDirectory(sFilePath);
//在指定目录及子目录下查找文件
DirectoryInfo Dir=new DirectoryInfo(dirPath);
try
{
foreach(DirectoryInfo d in Dir.GetDirectories())//查找子目录
{
FindFile(Dir+d.ToString()+"\\",svrPath+d.ToString()+"\\");
//FindFile(Dir+d.ToString()+"\",svrPath+d.ToString()+"\");
}
foreach(FileInfo f in Dir.GetFiles()) //查找文件
{
//f.SaveAs(Server.MapPath(svrPath + f.ToString()));//如果要保存到其他地方,注意修改这里
f.CopyTo(System.Web.HttpContext.Current.Server.MapPath(svrPath + f.ToString()), true);
HttpContext.Current.Response.Write("4554132");
}
}
catch(Exception e)
{
;
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
原本以为这样就可以达到效果,但是却发现了一个致命的问题!因为Fileupload控件本身是不支持文件夹的上传,即使通过ashx也无法赋值给它。通过了解更多资料,得知,由于安全性原因,不可能直接在浏览器上通过代码直接上传本地文件夹,必须通过ActiveX控件才能实现。
从安全权限来分析,确实也是不允许的,否则我写一个网页,里面嵌入这段js代码,你一打开这个网页,js就可以开始慢慢的去遍历你的硬盘,把你的文件都上传到服务器。只有用户通过input控件自己选择的文件,才允许上传。
本文只是小编进行解决问题的一个思路并不是一个正确的方法,目的在于和大家进行学习交流,获得更好的解决办法。
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 应用启动数据初始化接口CommandLineRunner和Application详解在SpringBoot项目中创建组件类实现Command
- 想必大家都知道,国内的Android应用基本都是免费的
- 前提前面写过一篇关于Environment属性加载的源码分析和扩展,里面提到属性的占位符解析和类型转换是相对复杂的,这篇文章就是要分析和解读
- 项目描述:这是一个基于SpringBoot+Vue框架开发的仿小米电子产品售卖商城系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说
- 本文实例讲述了Java使用自定义注解实现为事件源绑定事件 * 操作。分享给大家供大家参考,具体如下:一 定义注解import java.la
- 通过本篇文章主要给大家讲解了在JAVA开发中Servlet3.0异步处理遇到的问题以及处理办法,以下是具体内容:Servlet 3.0 开始
- 1.数据数据(Data)是外部世界信息的载体, 是能够被计算机识别,加工,存储的。在现实生活中也就是我们的产品原材料。计算机中的数据包括数值
- 本文实例讲述了Java Swing实现窗体添加背景图片的2种方法。分享给大家供大家参考,具体如下:在美化程序时,常常需要在窗体上添加背景图片
- 大家对于 Spring 的 scope 应该都不会默认。所谓 scope,字面理解就是“作用域”、“范围”,如果一个 bean 的 scop
- 如下所示:public static void main(String[] args) throws IOException {  
- 一、图示二、多线程编程何为多线程,通俗的讲就是让你的代码同时干好几件事。而我们的一个代码文件或者一个项目就是一个进程,而如果我们想提高效率,
- 1、问题引入我们已经完成了后台系统的登录功能开发,但是目前还存在一个问题,就是用户如果不登录,直接访问系统首页面,照样可以正常访问。很明显,
- 前言:java.util.Set接口和 java.util.List接口一样,同样继承自 Collection接口,它与
- 前言回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息。1、什么是回调软件模块之间总
- 这个问题是我自己开发中遇到的问题 数据库使用的是mysql5.6 字段名称为checkingTime 类
- 本文实例为大家分享了Java Socket聊天室功能的具体代码,供大家参考,具体内容如下Client.javaimport java.io.
- springboot使用mybatis一对多的关联查询由于刚开始写java不久,对sql语句的熟悉度还是不够熟练,虽然现在使用的mybati
- 这篇文章主要介绍了Spring Boot项目维护全局json数据代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- SpringCloudStream配置以下配置摘自《SpringCloud微服务实战》,配置主要包括两大部分:Stream配置(基础配置、通
- ModbusModbus是一种串行通信协议。Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、T