`

下载选择文件夹而不是文件(这个知识源自http://supercrsky.iteye.com/blog/617149)

    博客分类:
  • JS
 
阅读更多
解决方案1:
调用windows 的shell,但会有安全问题.

 * browseFolder.js
 * 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框
 * 以供用户实现对系统文件夹选择的功能
 * 文件夹选择对话框起始目录由
 * Shell.BrowseForFolder(WINDOW_HANDLE, Message, OPTIONS, strPath)函数
 * 的strPath参数设置
 * 例如:0x11--我的电脑
 *   0 --桌面
 *  "c:\\"--系统C盘

 *
 * 用如下代码把该函数应用到一个HTML文件中:
 *  <script src="browseFolder.js"></script>
 * 或把下面代码直接COPY到<script language="javascript">...</script>标签中;

 * 特别注意的是,由于安全方面的问题,你还需要如下设置才能使本JS代码正确运行,
 * 否者会出现"没有权限"的问题.

 *
 * 1、设置可信任站点(例如本地的可以为:http://localhost)
 * 2、其次:可信任站点安全级别自定义设置中:设置下面的选项
 * "对没有标记为安全的ActiveX控件进行初始化和脚本运行"----"启用"  
  1. /***  
  2.     path 要显示值的对象id  
  3. ****/  
  4. function browseFolder(path) {   
  5.     try {   
  6.         var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939";  //选择框提示信息   
  7.         var Shell = new ActiveXObject("Shell.Application");   
  8.         var Folder = Shell.BrowseForFolder(0, Message, 64, 17);//起始目录为:我的电脑   
  9.   //var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面   
  10.         if (Folder != null) {   
  11.             Folder = Folder.items();  // 返回 FolderItems 对象   
  12.             Folder = Folder.item();  // 返回 Folderitem 对象   
  13.             Folder = Folder.Path;   // 返回路径   
  14.             if (Folder.charAt(Folder.length - 1) != "\\") {   
  15.                 Folder = Folder + "\\";   
  16.             }   
  17.             document.getElementById(path).value = Folder;   
  18.             return Folder;   
  19.         }   
  20.     }   
  21.     catch (e) {   
  22.         alert(e.message);   
  23.     }   
  24. }  

使用的时候:

Js代码 复制代码 收藏代码
  1. <td>   
  2.                             <input type="text" name="path" />   
  3.                         </td>   
  4.                         <td>   
  5.                             <input type="button" onclick="browseFolder('path')"  
  6.                                 value="选择生成路径" />   
  7.                         </td>  

2.解决方案二:
 自己写一个js读取本地硬盘的选择框, 缺点是外观上较上一个差一些.

 

Js代码 复制代码 收藏代码
  1. <html>   
  2. <head>   
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">   
  4. <title>无标题文档</title>   
  5. </head>   
  6. <body>   
  7. <table border="0" cellpadding="0" width="100%" id="tb_show">           
  8.         <tr>   
  9.             <td width="18%">文件保存位置:</td>   
  10.             <td width="82%">    
  11.                 <%--<html:file property="file" size="40"  styleClass="inputbox"/>--%>   
  12.                 <input name="backDir" type="text" value ="C:\" size="100" width="500">   
  13.             </td>   
  14.         </tr>   
  15.            
  16.         <tr>   
  17.             <td>目录位置:</td>   
  18.             <td>    
  19.                 <select name="tables_drive" id="tables_drives" onchange="get_drives()" ></select>   
  20.             </td>   
  21.         </tr>   
  22.            
  23.         <tr>       
  24.             <td colspan="2">               
  25.                 <select name="table_folder" id="table_folder"  size="10" multiple ondblclick="get_file()"></select>   
  26.             </td>   
  27.         </tr>   
  28.   
  29.         <tr>   
  30.             <td colspan="2">   
  31.                 <font color="red">说明:双击列表框的一个选项,就将该文件夹下面的文件夹显示在该列表框中。第一个就是根目录</font>   
  32.             </td>   
  33.         </tr>   
  34. </table>   
  35. </body>   
  36. </html>   
  37. <script>   
  38. /**//*  
  39. *初始化,将系统所有的驱动器放入table_drives列表  
  40. */  
  41. window.onload = new function init()   
  42. {   
  43.     var fso, s, n, e, x;   
  44.     fso = new ActiveXObject("Scripting.FileSystemObject");   
  45.     e = new Enumerator(fso.Drives);   
  46.     s = "";   
  47.     for (; !e.atEnd(); e.moveNext())   
  48.     {   
  49.       x = e.item();   
  50.       s = s + x.DriveLetter;   
  51.       s += ":";   
  52.       if (x.DriveType == 3)   
  53.          n = x.ShareName;   
  54.       else if (x.IsReady)   
  55.          n = x.VolumeName;   
  56.       else  
  57.          n = "[驱动器未就绪]";   
  58.       s +=   n + ",";   
  59.     }   
  60.     var drives = s.split(",");       
  61.     var tableDrives = document.getElementById("tables_drives");   
  62.     for ( var i = 0; i < drives.length-1; i++ )   
  63.     {   
  64.         var option = document.createElement("OPTION");   
  65.         drives[i].split(":");   
  66.         option.value = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];   
  67.         option.text = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];   
  68.         tableDrives.add(option);   
  69.     }   
  70. }   
  71.   
  72. /**//*  
  73. *tables_drives列表中选中的驱动器上所有文件夹放入table_folder列表中  
  74. */  
  75. function get_drives()   
  76. {   
  77.     var tableDrives = document.getElementById("tables_drives");   
  78.     var tableFolders = document.getElementById("table_folder");       
  79.     for ( var i = 0; i < tableDrives.options.length; i++ )   
  80.     {           
  81.         if ( tableDrives.options[i].selected == true )   
  82.         {   
  83.             var fso, f, fc, s;               
  84.             var drive = tableDrives.options[i].value.split(":")[0].substring(1,tableDrives.options[i].value.split(":")[0].length);   
  85.             document.getElementById("backDir").value = drive + ":\\";   
  86.             fso = new ActiveXObject("Scripting.FileSystemObject");               
  87.              if (fso.DriveExists(drive))   
  88.             {   
  89.                 d = fso.GetDrive(drive);   
  90.                 if ( d.IsReady )   
  91.                 {   
  92.                     f = fso.GetFolder(d.RootFolder);    
  93.                     fc = new Enumerator(f.SubFolders);   
  94.                     s = "";   
  95.                     for (;!fc.atEnd(); fc.moveNext())   
  96.                     {   
  97.                      s += fc.item();   
  98.                      s += ",";   
  99.                     }   
  100.                        
  101.                     var len = tableFolders.options.length;   
  102.                     while(len >= 0)   
  103.                     {   
  104.                         tableFolders.options.remove(len);   
  105.                         len--;   
  106.                     }   
  107.                     var option = document.createElement("OPTION");   
  108.                     option.value = drive + ":\\";   
  109.                     option.text = drive + ":\\";   
  110.                     tableFolders.add(option);   
  111.                     var folders = s.split(",");                                         
  112.                     for ( j = 0; j < folders.length -1; j++)   
  113.                     {   
  114.                         option = document.createElement("OPTION");   
  115.                         option.value =  folders[j];   
  116.                         option.text = folders[j];   
  117.                         tableFolders.add(option);   
  118.                     }       
  119.                 }   
  120.                 else  
  121.                 {   
  122.                     alert("无法改变当前内容!")   
  123.                 }                   
  124.             }   
  125.             else  
  126.             return false;     
  127.         }           
  128.     }   
  129. }   
  130.   
  131. /**//*  
  132. *table_folder双击选项中的一个选项,就将该文件夹下面的文件夹显示在table_folder列表中。  
  133. */  
  134. function get_file()   
  135. {   
  136.     var tableFolders = document.getElementById("table_folder");       
  137.     var tableDrives = document.getElementById("tables_drives");   
  138.     for ( var i = 0; i < tableFolders.options.length; i++ )   
  139.     {   
  140.         if ( tableFolders.options[i].selected == true )   
  141.         {   
  142.             var fso, f, fc, s;               
  143.             var folderpath = tableFolders.options[i].value.substring(0,tableFolders.options[i].value.length);   
  144.             if ( folderpath.charAt(folderpath.length-1) == "\\" )   
  145.             {   
  146.                 document.getElementById("backDir").value = folderpath;   
  147.             }   
  148.             else  
  149.             {   
  150.                 document.getElementById("backDir").value = folderpath + "\\";   
  151.             }   
  152.                
  153.                
  154.             fso = new ActiveXObject("Scripting.FileSystemObject");       
  155.             f = fso.GetFolder(folderpath);    
  156.             fc = new Enumerator(f.SubFolders);   
  157.             s = "";   
  158.             for (;!fc.atEnd(); fc.moveNext())   
  159.             {   
  160.              s += fc.item();   
  161.              s += ",";   
  162.             }       
  163.             var len = tableFolders.options.length;   
  164.             while(len >= 0)   
  165.             {   
  166.                 tableFolders.options.remove(len);   
  167.                 len--;   
  168.             }           
  169.             var opt = "";               
  170.             var opt1 = "";   
  171.             for ( j = 0; j < folderpath.split("\\").length; j++ )   
  172.             {   
  173.                 var option = document.createElement("OPTION");   
  174.                 opt = opt + folderpath.split("\\")[j]+"\\";   
  175.                 if ( j > 0)   
  176.                 {   
  177.                     opt1 = opt;   
  178.                     option.value = opt1.substring(0,opt1.length-1);   
  179.                     option.text = opt1.substring(0,opt1.length-1);   
  180.                     tableFolders.add(option);       
  181.                 }   
  182.                 else  
  183.                 {   
  184.                     option.value = opt;   
  185.                     option.text = opt;   
  186.                     tableFolders.add(option);                               
  187.                 }   
  188.                                
  189.             }   
  190.             if ( tableFolders.options[0].value == tableFolders.options[1].value )   
  191.             {   
  192.                 tableFolders.options.remove(1);   
  193.             }    
  194.             if ( s != "" )           
  195.             {                   
  196.                 var folders = s.split(",");                                         
  197.                 for ( j = 0; j < folders.length -1; j++)   
  198.                 {   
  199.                     option = document.createElement("OPTION");   
  200.                     option.value = folders[j];   
  201.                     option.text = folders[j];   
  202.                     tableFolders.add(option);   
  203.                 }       
  204.             }                       
  205.         }   
  206.     }   
  207. }   
  208. </script>  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics