当前位置: 代码迷 >> Web前端 >> 上载选择文件夹而不是文件(这个知识源自http://supercrsky.iteye.com/blog/617149)
  详细解决方案

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

热度:792   发布时间:2012-11-23 00:03:43.0
下载选择文件夹而不是文件(这个知识源自http://supercrsky.iteye.com/blog/617149)
解决方案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>??
  相关解决方案