最近由于项目需要开始在之前文件分片上传文件的基础上实现文件夹的上传。在开发B/S架构的文件夹上传时遇到了一下问题,并给出我们的解决方案以供参考。如您有更好的方案也欢迎及时的交流。
问题一:H5获取文件路径之后只有文件完整的相对路径串,不能直接获取他的父目录以及子目录?
首先,简单示范一下H5中获取文件完整相对路径的方法,获取到的路径形式一般为:test/a/b/c.txt的形式,如下:
var files = event.target.files;
var i=0;
var fullFilePath = files[i].webkitRelativePath;// 包含文件名的完整路径
问题分析:
由于不能像windows下可以直接使用isDirectory或者isfile之类的函数,所以只能取出文件的完整路径,然后根据已经创建了的路径列表来判断该级目录是否需要创建,而不能按照目录层级一级一级的去上传。
解决方案:
取出文件的完整目录串,拆分之后逐级判断该级是否需要创建,问了防止存在目录名称相同的情况,可以使用取完整的目录串的形式判断,即:判断test/a/b/是否存在时,需要先判断test若创建再判断test/a已经创建,再判断test/a/b已经创建。或者使用目录对应的ID串的形式判断一个目录是否已经创建。
问题二、前台是否允许存在同名文件夹?
可能在本地的C:\和D:\下都存在一个叫做test的目录,但是内容不同,这时需要允许上传这两个同名文件夹。所以这种情况必须要实现前台允许同名目录结构在同一父目录下存在的情