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

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

我们知道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 οnclick="browse()">选择文件夹</a>
         <a οnclick="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;
}

        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值