项目里面有上传文件夹的功能,谷歌解决了,使用的是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。。。