浏览代码

:art: API `/api/file/readDir` support for returning symbolic link information (#8805)

* :art: API `/api/file/readDir` response symlink info

* :art: distinguish between directory symlink and file symlink
Yingyi / 颖逸 2 年之前
父节点
当前提交
b45cf73ed8
共有 4 个文件被更改,包括 20 次插入3 次删除
  1. 2 0
      API.md
  2. 2 0
      API_zh_CN.md
  3. 11 2
      kernel/api/file.go
  4. 5 1
      kernel/util/file.go

+ 2 - 0
API.md

@@ -1076,10 +1076,12 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
     "data": [
         {
             "isDir": true,
+            "isSymlink": false,
             "name": "20210808180320-abz7w6k"
         },
         {
             "isDir": false,
+            "isSymlink": false,
             "name": "20210808180320-abz7w6k.sy"
         }
     ]

+ 2 - 0
API_zh_CN.md

@@ -1068,10 +1068,12 @@
     "data": [
         {
             "isDir": true,
+            "isSymlink": false,
             "name": "20210808180320-abz7w6k"
         },
         {
             "isDir": false,
+            "isSymlink": false,
             "name": "20210808180320-abz7w6k.sy"
         }
     ]

+ 11 - 2
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),
 		})
 	}
 

+ 5 - 1
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 {