ie下通過ActiveX獲取本地文件夾及文件信息

項目裏面有上傳文件夾的功能,谷歌解決了,使用的是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。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章