ie下通过ActiveX获取本地文件夹及文件信息

9 篇文章 0 订阅
2 篇文章 0 订阅

项目里面有上传文件夹的功能,谷歌解决了,使用的是input的webkie属性,网上有很多封装好的插件随便拿来用,高高兴兴搬砖去。

但是要兼容IE !!!

上网搜了狠多资料,换着法的换插件,就是不ok,又继续查资料,对之介绍的少之又少,很对都是直接放弃ie的,但是项目对应的用户不想放弃,那只能苦逼的继续了。

在ie下可以直接通过ActiveX来直接访问和操作本地文件,但这个方法有很多局限性,只能在ie下使用,并且要设置他的访问权限,不然会报错。设置链接:https://jingyan.baidu.com/article/e8cdb32b03752637052bad3d.html

设置后就可以使用了,下面是我项目的抽离出来部分代码:

1、访问本机

readFolder(){
        try {
            // 获取文件夹路径
            let Message = "\u8bf7\u9009\u62e9\u6587\u4ef6\u5939"; //选择框提示信息
            let Shell = new ActiveXObject("Shell.Application");
            // let Folder = Shell.BrowseForFolder(0, Message, 64, 17); //起始目录为:我的电脑
            let 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 + "\\";
                }
                // 获取文件夹下的文件目录
                this.traversalDirectory(Folder)//读取文件夹下的目录

                return Folder;
            }
        }
        catch (e) {
            alert(e.message);
        }  
      },

2、遍历目录,获取目录下的文件

traversalDirectory(para){
        let fso = new ActiveXObject("Scripting.FileSystemObject");
        let fldr = fso.GetFolder(para);
        let file = new Enumerator(fldr.files);
        let folder = new Enumerator(fldr.SubFolders);
        for (; !folder.atEnd(); folder.moveNext()){
          let folderStr = String(folder.item());
          this.readFiles(folderStr)//读取文件夹的文件
          
        }
      },

3、读取文件夹下文件的绝对路径

readFiles(Folder){
        let fso = new ActiveXObject("Scripting.FileSystemObject");   //加载控件
        let f = fso.GetFolder(Folder);
        let underFiles = new Enumerator(f.files); //文件夹下文件
        let filesData=[]
        for (;!underFiles.atEnd();underFiles.moveNext()){   
          let fn = "" + underFiles.item(); //得到文件夹下文件路径
          this.getFileinfo(fn)
        }
}

4、获取文件信息

getFileinfo(path){
        let fso = new ActiveXObject("Scripting.FileSystemObject");
        let file=fso.GetFile(path)
        let type =/\.(jpg|jpeg|bmp|png)$/;//验证文件是否图像文件
        if(type.test(file.Name.toLowerCase())){ 
          let dirname=path    
          let name=file.Name //获取文件名字
          let size = file.size;//获取文件大小
          let type=file.type
  
          let formData = new FormData();

          formData.append("name",name,'uploadFile');
          formData.append("size",size,'uploadFile');
          formData.append("dirname",dirname,'uploadFile');

          this.sendFile(formData)//上传数据 

          return formData
        }
      },

在这一步一直获取不到文件的数据流,后台获不到图像数据,查了好多资料一直不能解决???怎么破,兼容ie好难!!!!

操作本地文件的方法这个博客的方法还挺全的,可以查阅一下:https://blog.csdn.net/zl834205311/article/details/47000137

 

最后,希望懂的大佬help me。。。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值