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控件自己选择的文件,才允许上传。
本文只是小编进行解决问题的一个思路并不是一个正确的方法,目的在于和大家进行学习交流,获得更好的解决办法。


猜你喜欢
- 背景最近再做一个需求,就是对站点的一些事件进行埋点,说白了就是记录用户的访问行为。那么这些数据怎么保存呢,人家点一下保存一下?显然不合适,肯
- 本文实例讲述了C#实现的算24点游戏算法。分享给大家供大家参考。具体如下:using System;using System.Collect
- 本文实例为大家分享了C语言实现顺序表的顺序查找和折半查找的具体代码,供大家参考,具体内容如下顺序查找:#include <iostre
- java获取Date时间的各种方式为大家分享如下常用的时间获取方式public class DateUtils {/** *
- 写在前面,在笔者完成这个demo的时候,笔者发现现在大家已经不用Ajax来完成联级菜单了,实际上笔者这个demo也并不是为了完成这个,笔者主
- 本文实例为大家分享了PhotoView实现图片多点触控效果展示的具体代码,供大家参考,具体内容如下效果:点击后能够自由缩放、平移;添加依赖:
- JavaFX 介绍一提到Java的图形界面库,我们通常听到的都是Swing,或者更老一点的AWT,包括很多书上面介绍的也都是这两种。很多学校
- 一、简介1、AutoCompleteTextView的作用 2、AutoCompleteTextView的类结构图也就是拥有Edi
- java调用python的几种用法如下:在java类中直接执行python语句在java类中直接调用本地python脚本使用Runtime.
- 参考文献:https://www.jb51.net/article/232858.htm使用springboot 2 构建项目,调试代码的时
- 这里分享下我在日常开发中对 Gradle 的常用配置规则一、版本号配置当项目逐渐演进的过程中,主工程依赖的 Module 可能会越来越多,此
- 本文实例讲述了Android中ContextMenu用法。分享给大家供大家参考。具体如下:main.xml文件如下:<?xml ver
- java LRU(Least Recently Used )详解LRU是Least Recently Used 的缩写,翻译过来就是“最近最
- 一、注解注解(Annotation): 从jdk5.0开始引进,可以对程序进行解释或被其他程序读取。注解格式:"@注释名"
- 如下所示:public class Test{public static void main(String[] args) {
- 问题换了台开发机,重新安装了下开发环境。突然发现Visual Studio Code无法用来调试Unity了。明明流程都是按照Unity官方
- 1、简介应客户要求为了是特殊定制的系统更具安全,系统ROM需要使用自己定义的签名,还有一些特殊的场景也会更改系统的签名比如在过cts认证测试
- C++编写的一个图书管理系统,供大家参考,具体内容如下2018大一的课设,搬到这纪念一下,共1200多行代码为图书管理人员编写一个图书管理系
- 本文实例讲述了Android通过应用程序创建快捷方式的方法。分享给大家供大家参考。具体如下:Android 快捷方式是桌面最基本的组件。它用
- https://www.jb51.net/article/152879.htm上节,我们明白了proc文件系统的作用,接下来我们在已经写好的