挑战--asp.net 文件夹上传

简介: 今天遇到一个有趣的问题,公司让平安做一个上传文件夹的功能,这个任务具有一定的挑战性哦。上传文件夹,我第一次看到有人这样做,以前都是上传压缩文件,从来就没有见人上传过文件夹,我也从来就没有尝试过。先不讨论公司那些人是怎么想的,不过这是一个具有研究性的问题。

今天遇到一个有趣的问题,公司让平安做一个上传文件夹的功能,这个任务具有一定的挑战性哦。上传文件夹,我第一次看到有人这样做,以前都是上传压缩文件,从来就没有见人上传过文件夹,我也从来就没有尝试过。先不讨论公司那些人是怎么想的,不过这是一个具有研究性的问题。自己思考一阵子,想出一个解决方案。
    公司是做Web项目开发的,对于一个网站来说上传那肯定是必不可少的功能。呵呵,上传文件想得出来也不错。下面是我的两种考虑方案
   (1)使用Directory这个类结合JavaScript
      到目前为止,这种方案都没有实现过,可能是自己的能力有限。用Directory循环遍历这个文件夹下面的所有文件和文件夹,如果遇到的是文件夹在服务器指定目录下创建同样一个文件夹,而遇到压缩文件则上传这个文件。到目前我不清楚怎样用JavaScript 来遍历文件夹中的内容,即使读出了文件中的所有内容,循环上传文件和创建文件,就是说每一次循环都要访问一次服务器,如果文件夹的内容大,结构目录深,问题就显而易见了。似乎问题就是捉襟见肘一样,解决了一个又暴露另一个问题,没有办法,这种解决方案显然很伤脑筋。
   (2)可行性方案(经测试已经通过)
      分析的思路就是既然上传文件都是上传的压缩文件, asp.net 中的控件上传也只能上传压缩文件,那我们何必不讲这个文件夹压缩呢,压缩上传就是说文件到服务的这部分问题解决了,进而就是将压缩文件解压出来。呵呵,当我考虑到这个问题的时候又蒙了,.net解压文件似乎有点困难哦,读文件写文件还差不多,现在是一种文件格式到另一种文件格式的转化,显然我没有则了。
     我不能放弃这种想法,毕竟相当于上面的是进步,虽然这么很容易实现。我曾经能将图片的属性转化,现在同样是文件转化一定是有办法的。解压......,呵呵我们不是经常用到解压工具么,Windows上面一般都要安装的,否则怎么读取压缩文件。对啊是办法,通过他来解压,现在我要做的就是用C#让这个程序自动运行,那问题就全部解决了。
    去年做游戏开发的时候用过哦,就是写一个程序将Windows中的键盘功能全部屏蔽掉,然后通过调用另外一个外部程序来驱动键盘,呵呵问题都解决了。我只要驱动这个解压程序就可以了啊,这个驱动是我曾经做过的啊。
     string winrarExe = @"C:\Program Files\WinRAR\WinRAR.exe"; //这个就是解压文件程序的路径
     string filepathTo = "CommonData.rar";//被解压文件的路径
     string filePathSave = ""; //解压保存文件名称
     Process p = new Process(); //这个就是用来驱动上面的程序的
     p.StartInfo.FileName = winrarExe;
     string arguments = @"x -inul -y -o+";
     arguments += " " + filepathTo + " " + filePathSave;  
     p.StartInfo.Arguments = arguments;   //这是传递相应参数
     p.Start();
     while (!p.HasExited)
     {
           p.WaitForExit();
     }

    上面的东西说白了就是启动一个线程,没有什么的。具体参数如下,网上很多资料,我翻阅书籍查询了几个:
    p.StartInfo.Arguments=" a -r "+strR+" "+strF;   //默认压缩到RAR
    p.StartInfo.Arguments=" a -afzip "+strR+" "+strF;  //压缩到Zip
    p.StartInfo.Arguments=" m "+strR+" "+strF;     //压缩到RAR并删除原文件
    p.StartInfo.Arguments=" a -p123456 "+strR+" "+strF;  //密码为123456

    p.StartInfo.Arguments=" x "+strR+" "+strF;  //从RAR解压缩,文件名要一致
    p.StartInfo.Arguments=" x -p123456 "+strR+" "+strF;  //解压加密的RAR

    " x -o+" 覆盖已经存在的文件
    " x -o-" 不覆盖已经存在的文件
    " x " + strzipPath + "  qingyuan.txt "' + strtxtPath  
           只从压缩包中解压出qingyuan.txt,其它文件不予解压
    " -y"   对所有询问回应为"是",即发生错误也不弹出窗口
    " -cl"   转换文件名为小写字母


   公司的那个功能我基本算是实现了,但是有点不符合情理呵呵,让我上传文件夹,而我上传的是压缩文件,走了弯路,没有按需求来,呵呵没有办法,慢慢再去研究上传文件夹吧,这个能解燃眉之急
  

相关文章
|
Apache
基于commons-net实现ftp创建文件夹、上传、下载功能.
基于commons-net实现ftp创建文件夹、上传、下载功能.
251 0
|
C#
.net core 删除指定路径下的所有文件以及文件夹(文件夹建议保留目录)
1、服务层 ```csharp /// <summary> /// 删除指定路径下的所有文件 /// </summary> /// <param name="filepath">指定路径</param> /// <returns></returns> public string DeleteSpecifiedPathAllFile(string filepath) { try { DirectoryInfo info = new DirectoryInfo(filepath); // 去除文件夹的只读属性 info.Attribu
139 0
.NET文件夹复制
static void CopyFile(string sources, string dest)         {             DirectoryInfo dinfo = new DirectoryInfo(sources);   ...
733 0
|
SQL
.NET文件夹更改、新建、删除
if (Directory.Exists(oldPath)) {                 Directory.Move(oldPath, path); if (OADBHelper.
845 0
|
安全 .NET Shell
asp.net excel 选择文件夹 批量导出
在客户端(非服务端) ,选择本地文件夹,一次导出多个excel。 前台:        导出excel function browseFolder(path) { try { ...
1048 0
|
存储 .NET C#
ASP.NET中App_Code,App_Data等文件夹的作用
1. Bin文件夹Bin文件夹包含应用程序所需的,用于控件、组件或者需要引用的任何其他代码的可部署程序集。该目录中存在的任何.dll文 件将自动地链接到应用程序。 2. App_Browser文件夹 该可选的文件夹包含.browser文件。
1278 0
完美实现.NET重写成文件夹格式及无后辍格式
网上找了半天,也问了几个高手,还在QQ问问上面提问了,不过一天过去了没有结果,但是一个高手在QQ上说,这些都是由.NET程序来实现,重写就是把这个地址传给.NET程序来实现。不管我怎么重写都只能到404错误,所以想到把404错误自定义到一个.NET页面,就可以了。
604 0