diff --git a/API.md b/API.md index 0533f7049..bddad934f 100644 --- a/API.md +++ b/API.md @@ -1076,10 +1076,12 @@ View API token in Settings - About, request header: `Authorization: T "data": [ { "isDir": true, + "isSymlink": false, "name": "20210808180320-abz7w6k" }, { "isDir": false, + "isSymlink": false, "name": "20210808180320-abz7w6k.sy" } ] diff --git a/API_zh_CN.md b/API_zh_CN.md index d4d8ebae4..76ed7ba2f 100644 --- a/API_zh_CN.md +++ b/API_zh_CN.md @@ -1068,10 +1068,12 @@ "data": [ { "isDir": true, + "isSymlink": false, "name": "20210808180320-abz7w6k" }, { "isDir": false, + "isSymlink": false, "name": "20210808180320-abz7w6k.sy" } ] diff --git a/kernel/api/file.go b/kernel/api/file.go index 675c04906..edde4c9f9 100644 --- a/kernel/api/file.go +++ b/kernel/api/file.go @@ -172,9 +172,18 @@ func readDir(c *gin.Context) { files := []map[string]interface{}{} for _, entry := range entries { + path := filepath.Join(dirPath, entry.Name()) + info, err = os.Stat(path) + if nil != err { + logging.LogErrorf("stat [%s] failed: %s", path, err) + ret.Code = 500 + ret.Msg = err.Error() + return + } files = append(files, map[string]interface{}{ - "name": entry.Name(), - "isDir": entry.IsDir(), + "name": entry.Name(), + "isDir": info.IsDir(), + "isSymlink": util.IsSymlink(entry), }) } diff --git a/kernel/util/file.go b/kernel/util/file.go index 97a205364..397bc0a4a 100644 --- a/kernel/util/file.go +++ b/kernel/util/file.go @@ -43,8 +43,12 @@ func IsEmptyDir(p string) bool { return 1 > len(files) } +func IsSymlink(dir fs.DirEntry) bool { + return dir.Type() == fs.ModeSymlink +} + func IsDirRegularOrSymlink(dir fs.DirEntry) bool { - return dir.IsDir() || dir.Type() == fs.ModeSymlink + return dir.IsDir() || IsSymlink(dir) } func IsPathRegularDirOrSymlinkDir(path string) bool {