您的位置:首页 > Web前端 > JavaScript

基于ActiveX 在B/S模式如何在js中查找读取本地文件及文件夹

2016-07-25 09:52 751 查看
最近要做个功能,要在浏览器其端上传客户本地文件夹,查找很久资料,勉强实现,做个记录,本人新手,大神无视我吧。

我们知道B/S模式下,浏览器是不允许js上传文件的。如果可以,恶意代码会扫描电脑把敏感文件都上传了,所以上传文件只能用<input type="file"/>  而file控件不能通过脚本控制其value,因此我们不能使用file控件来自动上传本地文件。这就很尴尬了,然后我找到ie的ActiveX,差强人意。

一、首先要用到ie的activeX插件,这个比较蛋疼,要在ie 安全设置里设置运行activeX插件,并将该网站添加到 受信任站点中(可先去掉下方 对该区域所有站点要求服务器验证的勾,再添加自己的网址,再打上勾)。

二、完成我们就能在js中是使用activeX对象了,能上代码就不bb:

  1  页面

         <input type="text" id="path" name="path" >

         <a onclick="browse()">选择文件夹</a>

         <a onclick="subfile()">上传</a>

   2 js代码

   function browse() {

      var path = BrowseFolder();

      $("#path").val(path);

    }

   //用于打开浏览对话框选择路径

 function BrowseFolder() {

    try {

        var Message = "请选择文件夹"; //选择框提示信息

        var Shell = new ActiveXObject("Shell.Application");

        var Folder = Shell.BrowseForFolder(0, Message, 0x0040, 0x11);//起始目录为我的电脑

        //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 + "\\";

            }

            return Folder;

        } else {

            Folder = "";

            return Folder;

        }

    } catch (e) {

        alert(e.message);

    }

}

   //点击上传按钮

function subfile() {

    //文件最外层路径

    var allpath = $("#path").val();

    if (!allpath) {

        alert("请选择文件夹");

        return false;

    }

    var paarr=[];

    var parr = FindAllFiles(allpath, paarr);

    //上传至后台

    var fileDic = [];

    for (var i = 0; i < parr.length; i++) {

        var data = {};

        var ForReading = 1;

        //声明操作文件的对象

        fso = new ActiveXObject("Scripting.FileSystemObject");

        ts = fso.OpenTextFile(parr[i], ForReading);

        //读取前2000个字符,这里我只取文件夹里的txt文件

        s = ts.read(2000);

        data.path = parr[i].Path;

        data.ftxt = s;

        fileDic.push(data);//txt文件路径:文件内容

    }

    var json = JSON.stringify(fileDic);

    //var json = $.toJSON(fileDic);

    $.ajax({

        type: "POST",

        url: //上传到后台的路径

        data: { 要上传的数据},

        dataType: "json",

        success: function (d) {

        },

        error: function (d) {

        }

    });

}

  function FindAllFiles(filePath, fparr) {

    try {

        var fso = new ActiveXObject("Scripting.FileSystemObject");

        var f = fso.GetFolder(filePath);

    } catch (e) {

        alert("请设置ie浏览器:设置-internet选项-安全-自定义:启用ActiveX!");

        return false;

    }

    var fc = new Enumerator(f.files);

    //var fparr = [];//存放文件名

    var fdparr = [];//存放文件夹名

    for (; !fc.atEnd() ; fc.moveNext()) {

        fparr.push(fc.item());

    }

    fk = new Enumerator(f.SubFolders);

    for (; !fk.atEnd() ; fk.moveNext()) {

        fdparr.push(fk.item());

    }

    //递归遍历查找文件夹下的所有子文件

    for (var i = 0; i < fdparr.length; i++) {

        FindAllFiles(fdparr[i], fparr);

    }

    return fparr;

}

        
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息