关于百度webUpLoader插件拖拽时有100个文件限制的解决方案之一

未经过严格测试,不知道有没有后遗症,请谨慎使用

_traverseDirectoryTree: function( entry, results ) {
                var deferred = Base.Deferred(),
                    me = this;
    
                if ( entry.isFile ) {
                    entry.file(function( file ) {
                        file.fullPath = entry.fullPath;//(插入文件路径)
                        results.push( file );
                        deferred.resolve();
                    });
                } else if ( entry.isDirectory ) {

//                    var promises = []
//                    readEntriesAll(entry,promises);

                    var promises = [],
                        arr = [];// 为了保证顺序。;

                    var readEntriesAll_my = function (entry3,promises){

                        var directoryReader = entry3.createReader();
                        var fnReadEntries = function (entries) {
                          entries.forEach(function (entry2) {
                            if(entry2.isFile){
//                                promises.push(entry2,arr);
//                                promises.push(entry2);
console.log(entry2);
                                entry2.file(function( file ) {
                                    file.fullPath = entry.fullPath;//(插入文件路径)
                                    results.push( file );
                                    deferred.resolve();
                                });
                            }
                            if(entry2.isDirectory){
//                            递归子目录
                                readEntriesAll_my(entry2, promises);
                            }
                          });

//                          如果文件数量大于100,此处还会运行
                          if (entries.length > 0) {
                            directoryReader.readEntries(fnReadEntries);
                          }

                          console.log(promises.length)
                        };

                        directoryReader.readEntries(fnReadEntries)
                    }

                    readEntriesAll_my(entry,promises);

//                    异步的,此处获取的值不是最终的
//                    console.log(promises.length);



//                    entry.createReader().readEntries(function( entries ) {
//                        var len = entries.length,
//                            promises = [],
//                            arr = [],    // 为了保证顺序。
//                            i;
//
//                        for ( i = 0; i < len; i++ ) {
//                            promises.push( me._traverseDirectoryTree(
//                                    entries[ i ], arr ) );
//                        }
//
//                        if(entries.length > 0){
//                            me._traverseDirectoryTree( entries,arr );
//                        }
//
//                        Base.when.apply( Base, promises ).then(function() {
//                            results.push.apply( results, arr );
//                            deferred.resolve();
//                        }, deferred.reject );
//                    });
                }

                return deferred.promise();
            },

找到webuploader.js中的_traverseDirectoryTree属性,重写了else if ( entry.isDirectory ) 中的代码,源代码已经注释掉了。

原理

readEntries方法为非标准的定义,有按字母排序获取前100的限制,参考资料:链接: FileSystemDirectoryReader/readEntries
要想突破限制,直接采用递归读取,直至读取不到为止,具体参考上方链接资料的说明:
A function which is called when the directory’s contents have been retrieved. The function receives a single input parameter: an array of file system entry objects, each based on FileSystemEntry. Generally, they are either FileSystemFileEntry objects, which represent standard files, or FileSystemDirectoryEntry objects, which represent directories. If there are no files left, or you’ve already called on this FileSystemDirectoryReader, the array is empty. readEntries()

 function fun(entries){
	 entries.forEach(function (entry2) {//只循环了按字母排序的前100,如果实际数量大于100,这个循环之后,entries.length > 0。
	 });
	 if(entries.length > 0){
		//从100开始(下标从0开始,所以这里不是101开始的)再次读取100个文件
		fun(entries);
	}
}
//上述只是说明了怎样递归掉用,未做是否是目录等的任何判断

测试结果参考:
测试的文件为63706个文件,目录层级为3级。
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值