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