input 遍历上传文件夹

js上传文件夹

上传文件夹遍历

以下就是遍历上传文件夹里面的文件夹和文件的方法,直接复制:
这是本人第一次纯js写上传文件夹遍历,写的比较low,喜欢的盆友可以点个关注,你们的关注是我向上的动力
h5部分:

<input ref=“uploadFolder” type=“file” name=“picpath” webkitdirectory
multiple=“multiple” @change=“changesData($event)” style=“display:none”/>

js部分
async changesData (event) {
let that = this;
let lists = Array.from(event.target.files);
//分割地址字符串获取文件夹名称
let fileNames = lists[lists.length-1].webkitRelativePath.split(’/’);
//用来存储已建文件夹和文件夹id
let arrs = [];
//第一次遍历上传文件夹 lists最后一条数据
for(let i=0;i<Number(fileNames.length)-1;i++){
//文件夹名
let title= fileNames[i];
//新建文件夹接口上传对象
let postData = {};
if(i>0){
postData[‘folder_pid’] = that.file_id;
}else {
if (that.folder_id > 0)postData[‘folder_pid’] = that.folder_id;
}
postData.title = title;
//新建文件夹
await api.addFolderPost(postData).then(res => {
if (res.code != ‘1’) {
that.$message({
message: res.msg,
center: true,
type: ‘error’,
});
}else {
let id = res.data.result.id;
this.file_id = res.data.result.id;
if(i>1){
//记录已经创建的文件夹和文件夹id 创建二级文件名字拼接防止下级(3级)以后文件夹同名 i代表文件夹级数
let num = Number(i)-1;
arrs.push({
title:fileNames[num]+title+i,
id:id
});
}else {
//创建一级 二级 文件夹 记录已经创建的文件夹id i代表文件夹级数
arrs.push({
title:title+i,
id:id
});
}
//遍历上传文件 只上传刚刚创建的文件夹下的文件
for(let x=0;x<lists.length;x++){
//分割地址字符串获取文件夹名
let webpath = lists[x].webkitRelativePath.split(’/’);
if(i>1){
let inum = Number(i)-1;
//二级以后的上传的文件 拼接上一级文件夹名称跟需要上传的文件夹做比较 防止出现文件传错文件夹
//遍历上传文件 判断是否是本文件夹下的文件
if(webpath[inum]+webpath[i] == fileNames[inum]+title && webpath[Number(i)+2] == undefined){
let file = lists[x];//上传的文件
this.subscribe(file,i,id,‘0’);
}
}else {
//遍历上传文件 判断是否是本文件夹下的文件
if(webpath[i] == title && webpath[Number(i)+2] == undefined){
let file = lists[x];//上传的文件
this.subscribe(file,i,id,‘0’);
}
}
}

                    }
                })
            }
            //第二次遍历上传文件夹  lists剩下没有创建的文件夹
            for(let i=0;i<Number(lists.length)-1;i++){
                //分割字符串 获取文件名
                let webkitRelativePath = lists[i].webkitRelativePath.split('/');
                let weblen = Number(webkitRelativePath.length)-1;
                //遍历剩下的文件 判断是否已经创建文件夹
                for(let y=0;y<weblen;y++){
                    //文件夹名
                    let title= webkitRelativePath[y];
                    let bool = true;
                    for (let x=0;x<arrs.length;x++){
                        let str = arrs[x].title;
                        //获取已经创建文件夹记录title参数最后一位数字lastStr
                        let lastStr = str.charAt(Number(str.length)-1);
                        //最后一位数字大于1的是3级文件夹,小于等于1的是一二级文件夹
                        if(lastStr>1){
                            let num = Number(y)-1;
                            //二级以后的文件夹跟title对比需要拼接上一级文件夹名字,防止出现三级以及后面的文件夹创建在错误的二级文件夹内
                            if(arrs[x].title == webkitRelativePath[num]+title+y){
                                bool = false;
                            }
                        }else {
                            if(arrs[x].title == title+y){
                                bool = false;
                            }
                        }
                    }
                    if(bool){
                        let postData = {};
                        if(y>0){
                            //遍历记录已经创建的文件夹数组
                            for(let x=0;x<arrs.length;x++){
                                let str = arrs[x].title;
                                //获取已经创建文件夹记录title参数最后一位数字lastStr
                                let lastStr = str.charAt(Number(str.length)-1);
                                //最后一位数字大于1的是3级文件夹,小于等于1的是一二级文件夹
                                if(lastStr>1){
                                    let numy = Number(y)-1;
                                    let numx = Number(y)-2;
                                    //获取需要创建文件夹的上一级文件夹id
                                    if(arrs[x].title == webkitRelativePath[numx]+webkitRelativePath[numy]+numy){
                                        that.folder_pid = arrs[x].id;
                                    }
                                }else {
                                    let numy = Number(y)-1;
                                    //获取需要创建文件夹的上一级文件夹id
                                    if(arrs[x].title == webkitRelativePath[numy]+numy){
                                        that.folder_pid = arrs[x].id;
                                    }
                                }
                            }
                            postData['folder_pid'] = that.folder_pid;
                        }else {
                            if (that.folder_id > 0)postData['folder_pid'] = that.folder_id;
                        }
                        postData.title = title;
                        //新建文件夹
                        await api.addFolderPost(postData).then(res => {
                            if (res.code != '1') {
                                that.$message({
                                    message: res.msg,
                                    center: true,
                                    type: 'error',
                                });
                            }else {
                                let id = res.data.result.id;
                                this.file_id = res.data.result.id;
                                if(y>1){
                                    //记录已经创建的文件夹和文件夹id 创建二级文件名字拼接防止下级(3级)以后文件夹同名 y代表文件夹级数
                                    let num = Number(y)-1;
                                    arrs.push({
                                        title:webkitRelativePath[num]+title+y,
                                        id:id
                                    });
                                }else {
                                    //记录已经创建的文件夹和文件夹id y代表文件夹级数
                                    arrs.push({
                                        title:title+y,
                                        id:id
                                    });
                                }

                                //遍历上传文件  只上传刚刚创建的文件夹下的文件
                                for(let x=0;x<lists.length;x++){
                                    let webpath = lists[x].webkitRelativePath.split('/');

                                    //y>1的是二级以后的文件夹 <1的是一二级文件夹
                                    if(y>1){
                                        let ynum = Number(y)-1;
                                        //判断是否是本文件夹下的文件
                                        if(webpath[ynum]+webpath[y] == webkitRelativePath[ynum]+title && webpath[Number(y)+2] == undefined){
                                            let file = lists[x];//上传的文件
                                            this.subscribe(file,Number(i)+1,id,'1',lists.length);
                                        }
                                    }else {
                                        //判断是否是本文件夹下的文件
                                        if(webpath[y] == title && webpath[Number(y)+2] == undefined){
                                            let file = lists[x];//上传的文件
                                            this.subscribe(file,Number(i)+1,id,'1',lists.length);
                                        }
                                    }
                                }
                            }
                        })
                    }
                }
            }
        },
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在前端使用JavaScript遍文件夹并展示文件是不常见的,因为浏览器的安全限制不允许直接读取本地文件系统。但是,你可以使用文件上功能来实现类似的效果。以下是一个示例代码: HTML部分: ```html <input type="file" id="fileInput" multiple> <div id="fileList"></div> ``` JavaScript部分: ```javascript function handleFileSelect(evt) { var files = evt.target.files; // 获取选择的文件数组 var fileList = document.getElementById('fileList'); fileList.innerHTML = ''; // 清空文件列表 // 遍选择的文件 for (var i = 0, f; f = files[i]; i++) { var fileName = f.name; var fileType = fileName.split('.').pop().toLowerCase(); // 获取文件类型 // 检查文件类型是否为Excel、CSV或PDF if (fileType === 'xlsx' || fileType === 'xls' || fileType === 'csv' || fileType === 'pdf') { var listItem = document.createElement('div'); listItem.textContent = fileName; fileList.appendChild(listItem); } } } document.getElementById('fileInput').addEventListener('change', handleFileSelect, false); ``` 这段代码创建了一个文件上的`<input>`元素和一个用于展示文件列表的`<div>`元素。当用户选择文件后,`handleFileSelect`函数会被触发。在这个函数中,我们遍了用户选择的每个文件,并检查文件类型是否为Excel、CSV或PDF。如果是,则创建一个新的`<div>`元素,并将文件名添加到文件列表中。 请注意,这仅仅是一个示例,它只在前端展示了符合条件的文件名,并没有上文件内容。如果你需要对文件进行更多操作,比如上到服务器或读取文件内容,你可能需要使用其他技术,比如后端处理或使用浏览器的File API。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值