`

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控件进行初始化和脚本运行"----"启用"

/***  
    path 要显示值的对象id  
****/  
function browseFolder(path) {   
    try {   
        var Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939";  //选择框提示信息   
        var Shell = new ActiveXObject("Shell.Application");   
        var Folder = Shell.BrowseForFolder(0, Message, 64, 17);//起始目录为:我的电脑   
  //var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面   
        if (Folder != null) {   
            Folder = Folder.items();  // 返回 FolderItems 对象   
            Folder = Folder.item();  // 返回 Folderitem 对象   
            Folder = Folder.Path;   // 返回路径   
            if (Folder.charAt(Folder.length - 1) != "\\") {   
                Folder = Folder + "\\";   
            }   
            document.getElementById(path).value = Folder;   
            return Folder;   
        }   
    }   
    catch (e) {   
        alert(e.message);   
    }   
}  



引用
自己写一个js读取本地硬盘的选择框, 缺点是外观上较上一个差一些.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>
<body>
<table border="0" cellpadding="0" width="100%" id="tb_show">        
        <tr>
            <td width="18%">文件保存位置:</td>
            <td width="82%"> 
                <%--<html:file property="file" size="40"  styleClass="inputbox"/>--%>
                <input name="backDir" type="text" value ="C:\" size="100" width="500">
            </td>
        </tr>
        
        <tr>
            <td>目录位置:</td>
            <td> 
                <select name="tables_drive" id="tables_drives" onchange="get_drives()" ></select>
            </td>
        </tr>
        
        <tr>    
            <td colspan="2">            
                <select name="table_folder" id="table_folder"  size="10" multiple ondblclick="get_file()"></select>
            </td>
        </tr>

        <tr>
            <td colspan="2">
                <font color="red">说明:双击列表框的一个选项,就将该文件夹下面的文件夹显示在该列表框中。第一个就是根目录</font>
            </td>
        </tr>
</table>
</body>
</html>
<script>
/**//*
*初始化,将系统所有的驱动器放入table_drives列表
*/
window.onload = new function init()
{
    var fso, s, n, e, x;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    e = new Enumerator(fso.Drives);
    s = "";
    for (; !e.atEnd(); e.moveNext())
    {
      x = e.item();
      s = s + x.DriveLetter;
      s += ":";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[驱动器未就绪]";
      s +=   n + ",";
    }
    var drives = s.split(",");    
    var tableDrives = document.getElementById("tables_drives");
    for ( var i = 0; i < drives.length-1; i++ )
    {
        var option = document.createElement("OPTION");
        drives[i].split(":");
        option.value = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];
        option.text = "["+drives[i].split(":")[0]+":]"+drives[i].split(":")[1];
        tableDrives.add(option);
    }
}

/**//*
*tables_drives列表中选中的驱动器上所有文件夹放入table_folder列表中
*/
function get_drives()
{
    var tableDrives = document.getElementById("tables_drives");
    var tableFolders = document.getElementById("table_folder");    
    for ( var i = 0; i < tableDrives.options.length; i++ )
    {        
        if ( tableDrives.options[i].selected == true )
        {
            var fso, f, fc, s;            
            var drive = tableDrives.options[i].value.split(":")[0].substring(1,tableDrives.options[i].value.split(":")[0].length);
            document.getElementById("backDir").value = drive + ":\\";
            fso = new ActiveXObject("Scripting.FileSystemObject");            
             if (fso.DriveExists(drive))
            {
                d = fso.GetDrive(drive);
                if ( d.IsReady )
                {
                    f = fso.GetFolder(d.RootFolder); 
                    fc = new Enumerator(f.SubFolders);
                    s = "";
                    for (;!fc.atEnd(); fc.moveNext())
                    {
                     s += fc.item();
                     s += ",";
                    }
                    
                    var len = tableFolders.options.length;
                    while(len >= 0)
                    {
                        tableFolders.options.remove(len);
                        len--;
                    }
                    var option = document.createElement("OPTION");
                    option.value = drive + ":\\";
                    option.text = drive + ":\\";
                    tableFolders.add(option);
                    var folders = s.split(",");                                      
                    for ( j = 0; j < folders.length -1; j++)
                    {
                        option = document.createElement("OPTION");
                        option.value =  folders[j];
                        option.text = folders[j];
                        tableFolders.add(option);
                    }    
                }
                else
                {
                    alert("无法改变当前内容!")
                }                
            }
            else
            return false;  
        }        
    }
}

/**//*
*table_folder双击选项中的一个选项,就将该文件夹下面的文件夹显示在table_folder列表中。
*/
function get_file()
{
    var tableFolders = document.getElementById("table_folder");    
    var tableDrives = document.getElementById("tables_drives");
    for ( var i = 0; i < tableFolders.options.length; i++ )
    {
        if ( tableFolders.options[i].selected == true )
        {
            var fso, f, fc, s;            
            var folderpath = tableFolders.options[i].value.substring(0,tableFolders.options[i].value.length);
            if ( folderpath.charAt(folderpath.length-1) == "\\" )
            {
                document.getElementById("backDir").value = folderpath;
            }
            else
            {
                document.getElementById("backDir").value = folderpath + "\\";
            }
            
            
            fso = new ActiveXObject("Scripting.FileSystemObject");    
            f = fso.GetFolder(folderpath); 
            fc = new Enumerator(f.SubFolders);
            s = "";
            for (;!fc.atEnd(); fc.moveNext())
            {
             s += fc.item();
             s += ",";
            }    
            var len = tableFolders.options.length;
            while(len >= 0)
            {
                tableFolders.options.remove(len);
                len--;
            }        
            var opt = "";            
            var opt1 = "";
            for ( j = 0; j < folderpath.split("\\").length; j++ )
            {
                var option = document.createElement("OPTION");
                opt = opt + folderpath.split("\\")[j]+"\\";
                if ( j > 0)
                {
                    opt1 = opt;
                    option.value = opt1.substring(0,opt1.length-1);
                    option.text = opt1.substring(0,opt1.length-1);
                    tableFolders.add(option);    
                }
                else
                {
                    option.value = opt;
                    option.text = opt;
                    tableFolders.add(option);                            
                }
                            
            }
            if ( tableFolders.options[0].value == tableFolders.options[1].value )
            {
                tableFolders.options.remove(1);
            } 
            if ( s != "" )        
            {                
                var folders = s.split(",");                                      
                for ( j = 0; j < folders.length -1; j++)
                {
                    option = document.createElement("OPTION");
                    option.value = folders[j];
                    option.text = folders[j];
                    tableFolders.add(option);
                }    
            }                    
        }
    }
}
</script>
分享到:
评论

相关推荐

    JS实现文件夹选择.HTML

    使用js实现文件夹选择功能,操作方便简单

    js 文件夹选择框(三)

    总之,“js 文件夹选择框(三)”这个主题很可能涉及到了JavaScript实现文件夹选择功能的各种技术和策略,包括使用Web组件、插件交互以及处理文件系统访问的挑战。通过阅读完整的博客文章,你可以获得更详细的步骤和...

    JS实现window下的文件夹选择

    在JavaScript中,实现“窗口下文件夹选择”功能是一个常见的需求,尤其是在开发Web应用程序时,用户可能需要上传或处理整个文件夹的内容。由于浏览器的安全限制,JavaScript原生并不支持直接选择文件夹,但通过HTML5...

    JavaScript实现选择文件夹

    ### JavaScript实现选择文件夹 在Web应用中,能够方便地让用户选择文件夹是一项非常实用的功能,尤其是在涉及到文件管理和上传的场景中。尽管HTML标准本身并没有提供直接选择文件夹的API,但通过结合JavaScript、...

    javascript文件夹选择框的两种解决方案.rar

    总结起来,JavaScript实现文件夹选择框的功能并不是直接支持的,但可以通过一些特定的浏览器特性或者非标准属性来实现。开发者应当根据项目需求和目标浏览器的兼容性来选择合适的方案,并始终确保用户数据的安全。

    js选择文件夹

    本文档介绍了一个基于JavaScript的文件夹选择方法。该方法通过创建一个ActiveX对象(`Shell.Application`),利用其提供的方法`BrowseForFolder`来弹出系统文件夹选择对话框,并获取用户选定的文件夹路径。 #### 二...

    javascript 实现压缩文件夹

    综上所述,这段代码实现了使用JavaScript进行文件系统操作、图片浏览以及压缩文件夹的基本功能。需要注意的是,这些操作在现代浏览器环境下可能无法直接运行,因为安全策略限制了脚本对本地文件系统的访问权限。

    JS实现新建文件夹功能

    在这一部分中,我们将深入探讨如何使用JavaScript实现新建文件夹的功能。首先,我们需要了解的是,由于浏览器的同源策略限制,通常我们不能使用JavaScript直接在用户的文件系统上创建文件夹。但是,如果配合HTML5的...

    【转】js实现弹出选择路径框

    通过JavaScript实现的文件夹选择,可以使用户体验更加流畅,无需逐个选择大量文件。 总的来说,这个话题涵盖了JavaScript的DOM操作、事件处理、浏览器API的使用以及跨浏览器兼容性问题。通过学习这篇博客和查看提供...

    jsp选择文件夹路径

    这个文件包含了实现文件夹选择功能所需的所有脚本代码。 ```html &lt;script src="browseFolder.js"&gt; ``` 2. **定义函数browseFolder** 在`browseFolder.js`文件中定义一个名为`browseFolder`的函数,该函数用于...

    javascript 实现的文件拷贝(能够循环遍历所选文件夹)

    下面将详细讲解如何利用JavaScript实现文件或文件夹的遍历与复制。 首先,理解JavaScript在浏览器环境中的限制是至关重要的。由于安全原因,JavaScript在浏览器中无法直接访问用户的文件系统,因此不能直接读取、...

    Javascript如何遍历一个文件夹下的所有文件与目录

    ### JavaScript遍历文件夹下的所有文件与目录 在JavaScript中,遍历文件夹下的所有文件与目录是一项常见的任务,尤其是在需要处理本地文件系统时。本文将详细介绍如何使用`Scripting.FileSystemObject`对象来实现这...

    通过js获取本地文件夹中的文件列表

    让我们深入探讨如何利用这些技术来实现“通过js获取本地文件夹中的文件列表”。 首先,我们要明确的是,JavaScript无法直接遍历本地目录,除非在特定的沙盒环境中,如使用Chrome的实验性File System Access API。这...

    js 可拖放、合并文件夹仿手机桌面效果

    在本项目中,我们主要探讨的是一个利用JavaScript技术实现的交互式桌面效果,它具有可拖放、合并文件夹的功能,模拟了手机桌面的操作体验。这个效果是通过一个名为"jtop"的库来实现的,它使得网页界面能够动态响应...

    jsp_选择文件夹的路径

    本文将详细介绍一种通过JavaScript调用Windows Shell API来实现文件夹选择的方法,并在JSP页面上展示所选文件夹的路径。 #### 解决方案详解 ##### 1. 调用Windows Shell API 为了实现文件夹的选择,我们可以利用...

    广告图片切换(js遍历文件夹)

    在描述中提到,“主要实现根据日期和时间js循环读取文件夹里面的图片”,这涉及到JavaScript的异步编程和文件操作。JavaScript通常不直接处理文件系统,而是通过服务器端的接口(如Node.js的fs模块)或API(例如Ajax...

    javascript实现的日期选择器

    在JavaScript实现的日期选择器中,关键知识点可能包括: 1. **事件监听**:利用`addEventListener`或`onclick`等方法响应用户的点击或滚动行为,触发相应的日期选取动作。 2. **DOM操作**:使用`document....

    JS折叠文件夹菜单

    4. **JavaScript实现** - **事件监听**:使用`addEventListener`方法监听文件夹元素的点击事件。 - **事件处理函数**:在处理函数中,获取目标元素的子菜单,并根据当前的`display`属性切换其状态。通常,如果`...

    浏览文件夹的js代码

    ### 浏览文件夹的JS代码解析与应用 在网页开发中,实现用户与本地文件系统的交互是一项重要的功能。本文将深入分析一个用于浏览器(包括IE和Firefox)中浏览文件夹的JavaScript代码,并探讨其工作原理及实际应用...

Global site tag (gtag.js) - Google Analytics