最近在做文件夹拖拽上传,发现之前使用的webuploader插件,在拖拽文件夹后,获取到的文件居然没有文件相对路径。查了好多资料都没有解决办法,还是自己看源码吧,最后发现在源码的第4746行的_traverseDirectoryTree,这个方法,其实这个方法是在4952行的FilePaste这个方法内的,这个方法是拖拽后执行的,也就是你拖拽文件夹后他会遍历这个文件夹内的所有文件,但是神奇的来了,在这个方法内进行遍历的时候,在entry内是能看到文件路径的,但是在他push的时候这个文件内是没有文件路径的。也就是下列的代码在执行entry.file的时候 最后出来的file结果是没有文件路径的。这就导致在我们最终结果的时候拿不到文件路径。所以我们在返回的时候给他插入一个文件路径就行了。
_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 ) {
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 ) );
}
Base.when.apply( Base, promises ).then(function() {
results.push.apply( results, arr );
deferred.resolve();
}, deferred.reject );
});
}
return deferred.promise();
},