`

下载选择文件夹而不是文件(这个知识源自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>  
分享到:
评论

相关推荐

    flash动态图片的自动播放效果

    2.jpg|3.jpg|4.jpg|5.jpg&bcastr_link=http://www.baidu.com|http://www.google.com|http://www.sina.com.cn|http://bbs.crsky.com|http://www.blogjava.net/supercrsky&bcastr_title=百度|谷歌|新浪|霏凡|我的博客&...

    MATLAB-四连杆机构的仿真+项目源码+文档说明

    <项目介绍> - 四连杆机构的仿真 --m3_1.m: 位置问题求解 --m2_1.m: 速度问题求解 --FourLinkSim.slx: Simlink基于加速度方程的仿真 --FourLinkSim2.slx: Simscape简化模型仿真 --FourLinkSim3.slx: Simscape CAD模型仿真 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------

    ridge_regression:用于岭回归的python代码(已实现以预测下个月的CO2浓度)

    ridge_regression 用于岭回归的python代码(已实现以预测下个月的CO2浓度) 资料可用性 文件 Ridge.py :标准函数和Ridge回归函数window_make.py :使用滑动窗口方法制作大小为p(窗口大小)的时间序列列表。 Final_version.ipynb :使用Co2数据对代码进行实验

    Polygon3-3.0.8-cp35-cp35m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    【java毕业设计】风俗文化管理系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统主要分为系统管理员和用户两个部分,系统管理员主要功能包括首页,个人中心,用户管理,节日风俗管理,饮食风俗管理,服饰风俗管理,礼仪风俗管理,信仰风俗管理,建筑风俗管理,我的收藏管理,留言板管理,论坛管理,系统管理。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    中国城市温度历史数据(2000-2020)-最新全集.zip

    中国城市温度历史数据(2000-2020)-最新全集.zip

    中国土地利用现状遥感监测数据(1km)-最新.zip

    中国土地利用现状遥感监测数据(1km)-最新.zip

    pgmagick-0.7.5-cp35-cp35m-win_amd64.whl.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    yolo算法-香烟盒子数据集-320张图像带标签-.zip

    yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,包含数据集配置文件data.yaml,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值

    java资源Google API for Java

    java资源Google API for Java提取方式是百度网盘分享地址

    中国分地区地级市泰尔指数数据集(2000-2019).zip

    中国分地区地级市泰尔指数数据集(2000-2019).zip

    【java毕业设计】高职院校教学中心可视化教学分析系统源码(ssm+mysql+说明文档).zip

    环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    【java毕业设计】整体衣柜定制系统源码(ssm+mysql+说明文档).zip

    环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    【java毕业设计】房屋出租系统源码(ssm+mysql+说明文档+LW).zip

    功能说明: 系统功能实现了首页,房源信息,交流论坛,公告资讯,个人中心,后台管理等功能。系统的后台实现了个人中心,用户管理,房东管理,房源类型管理,房源信息管理,在线咨询管理,预约信息管理,订单信息管理,签订信息管理,申请退租管理,交流论坛,系统管理等功能的添加、删除和修改。 环境说明: 开发语言:Java 框架:ssm,mybatis JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea Maven包:Maven3.3及以上 服务器:tomcat7及以上

    yolo算法-电线杆数据集-1493张图像带标签-.zip

    yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip;yolo算法-电线杆数据集-1493张图像带标签-.zip

    安装包eclipse-jee-neon-3-win32-x86-64

    安装包eclipse-jee-neon-3-win32-x86_64提取方式是百度网盘分享地址

    param-1.12.2-py2.py3-none-any.whl.rar

    PartSegCore_compiled_backend-0.12.0a0-cp36-cp36m-win_amd64.whl.rar

    Pillow_SIMD-6.0.0.post0+avx2-cp27-cp27m-win_amd64.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    peewee-3.14.10-cp37-cp37m-win32.whl.rar

    python whl离线安装包 pip安装失败可以尝试使用whl离线安装包安装 第一步 下载whl文件,注意需要与python版本配套 python版本号、32位64位、arm或amd64均有区别 第二步 使用pip install XXXXX.whl 命令安装,如果whl路径不在cmd窗口当前目录下,需要带上路径 WHL文件是以Wheel格式保存的Python安装包, Wheel是Python发行版的标准内置包格式。 在本质上是一个压缩包,WHL文件中包含了Python安装的py文件和元数据,以及经过编译的pyd文件, 这样就使得它可以在不具备编译环境的条件下,安装适合自己python版本的库文件。 如果要查看WHL文件的内容,可以把.whl后缀名改成.zip,使用解压软件(如WinRAR、WinZIP)解压打开即可查看。 为什么会用到whl文件来安装python库文件呢? 在python的使用过程中,我们免不了要经常通过pip来安装自己所需要的包, 大部分的包基本都能正常安装,但是总会遇到有那么一些包因为各种各样的问题导致安装不了的。 这时我们就可以通过尝试去Python安装包大全中(whl包下载)下载whl包来安装解决问题。

    中国各省GDP及农业主要指标数据集(1999-2019).zip

    中国各省GDP及农业主要指标数据集(1999-2019).zip

Global site tag (gtag.js) - Google Analytics