之前做项目,有做到一个就是上传的功能,其中Chrome和Firefox支持文件夹上传的,但是Safari还不支持文件夹上传,因此需要去判断当前用户选择上传的文件是不是一个文件夹,如果是文件夹的话,那么就不让他上传,因此才有这个方法。
代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36import BrowserUtil from './browser'
import OSUtil from './os'
/**
 * 判断文件是否为文件夹 (异步)
 * @参考资料 http://hs2n.wordpress.com/2012/08/13/detecting-folders-in-html-drop-area/
 * @param f 要检测的文件
 * @param callback 用来获取判断结果的回调
 */
export default function isFolder (f, callback) {
    var reader;
    callback = callback || function(){};
    if (!f.type) {
        // 如果是mac下safari的话,不用对size进行判断,因为mac 下 safari的文件夹是有大小的
        // 而其他浏览器,比如firefox,文件夹大小都是为0的
        if((OSUtil.MacOS && BrowserUtil.safari) ||
            (f.size % 4096 == 0 && f.size <= 102400)){
            try {
                reader = new FileReader();
                reader.onerror = function (e) {
                    callback(true);
                };
                reader.onload = function (e) {
                    callback(false);
                };
                reader.readAsDataURL(f);
            } catch (NS_ERROR_FILE_ACCESS_DENIED) {
                callback(true);
            }
        }else{
            callback(false);
        }
    } else {
        callback(false);
    }
}
需要注意的一点就是,如果读取的是大的文本文件的话,会变成异步操作1
2
3
4
5
6
7isFolder(file_, function (isFolder) {
    if (isFolder) {//文件夹
        console.log("is foloder")
    } else {
        console.log("is file")
    }
});
前端工具集(6) -- 上传的时候判断所选文件是否为文件夹
- 本文链接: http://kebingzao.com/2018/06/09/detect-folder/
 - 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!