zoukankan      html  css  js  c++  java
  • 挑战--asp.net 文件夹上传

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

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

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/liuguanghai/p/4975979.html
Copyright © 2011-2022 走看看